原文链接,http://www.cnblogs.com/birdshover/archive/2009/08/16/1547025.html

原文评论值得一看!

 

测试系统Window 2003 Server ,IIS 6.0 ,ASP.Net 3.5 sp1
Dual 1.8双核,2G内存,14G虚拟内存。

为了探寻IIS的最大并发数,先要做几个假设。

1、假设最大并发数就是当前的连接数。意思是当前能承受最大的连接,那么就表明最大的并发。
2、假设IIS应用程序池处于默认状态,更改设置将会对最大连接数产生影响。

做完假设,现在做限制,设置站点保持HTTP连接,超时设置成0,就是不会超时。在站点请求的default.aspx页面设置线程Thread.Sleep(int.MaxValue),接下来开发一个用来保持连接的小程序。

    class Program {
        private volatile static int errorCount = 0;
        private volatile static int rightCount = 0;         static void Main(string[] args) {
            ServicePointManager.DefaultConnectionLimit = 10000;
            int count = 0;
            int all = 0;
            while (true) {
                all++; count++;
                CreateThread();
                Thread.Sleep(10);
                if (count >= 200) {
                    Console.WriteLine(string.Format("sucess:{0};error:{1}", all - errorCount, errorCount));
                    count = 0;
                }
                if (all > 1800)
                    break;
            }
            Console.ReadKey();
        }         static void CreateThread() {
            Thread thread = new Thread(ActiveRequest);
            thread.IsBackground = true;
            thread.Start();
        }         static void ActiveRequest() {
            RequestClient client = new RequestClient("http://192.168.18.2/default.aspx?d=" + Guid.NewGuid());
            client.RequestProcess();
            if (client.IsError) {
                errorCount++;
                Console.WriteLine(string.Format("错误消息:{0}", client.Messages));
            } else {
                rightCount++;
                //Console.WriteLine(client.Messages);
            }
        }
    } /**
* author : yurow
*      http://birdshover.cnblogs.com
* description:
*      
* history : created by yurow 2009-8-16 0:29:05 
 */ using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO; namespace MaxLinked {
    /// <summary>
    /// 
    /// </summary>
    public class RequestClient {
        HttpWebRequest request;
        WebResponse response;         public RequestClient(string url) {
            request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Timeout = int.MaxValue;
            request.KeepAlive = true;
            ErrorCode = -1;
        }         public void AddHeader(string name, string value) {
            request.Headers.Add(name, value);
        }         private bool isError = false;
        private StringBuilder buffer = new StringBuilder();         public int ErrorCode { get; set; }         public bool IsError {
            get { return isError; }
        }         public string Messages {
            get { return buffer.ToString(); }
        }         public void RequestProcess() {
            try {
                response = request.GetResponse();
            } catch (WebException ex) {
                ErrorCode = (int)ex.Status;
                buffer.Append(ex.Message);
                isError = true;
            } 
            if (response != null) {
                Stream stream = null;
                StreamReader reader = null;
                try {
                    //stream = response.GetResponseStream();
                    //reader = new StreamReader(stream, Encoding.UTF8);
                    //buffer.Append(reader.ReadToEnd());
                } catch (Exception ex) {
                    buffer.Append(ex.Message);
                    isError = true;
                } finally {
                    //if (reader != null)
                    //    reader.Close();
                    //if (stream != null)
                    //    stream.Close();
                }
            } else {
                isError = true;
                buffer.Append("建立连接失败!");
            }
        }         public void Close() {
            if (response != null)
                response.Close();
            request.Abort();
        }
    }
}

 

程序设置为只能启动1800个线程,这是由于.Net单进程最大线程数好像是2000个。因此,要测试最大并发数,要需要同时开几个测试进程。把系统虚拟内存调到最大值,线程过多会急剧占用内存。现在开始测试。

打开web站点的性能计数器,把显示比例调成1万。

发现到5000个连接时,IIS服务器崩溃(503错误),去洗了个澡,发现IIS服务器无法自己修复错误。又测试了几次,发现最大并发值是8200个,但是一般到5000左右就会崩溃,有时候甚至只有1000个。

按8200个计算,一个用户开一个浏览器浏览网页,可能会占用2~3个连接(参考《IIS连接数实验——Web开发必读 》),按两个计算,那么IIS默认情况下,最大并发数是4000个左右。

打开应用程序池配置,把最大工作进程数调高(默认为1),能有效提高最大连接数。我记得以前看过一篇文章,讲的是调到5左右比较合适。

探寻IIS最大并发数的更多相关文章

  1. IIS Express并发数设置

    今天将之前的一个瓦片图的服务迁移到了asp.net core试了一下,使用的时候感觉客户端刷新时有些慢,估计是并发连接数限制的原因. 由于这是一个开发中的版本,是用IIS Express部署的,IIS ...

  2. IIS增加并发数

    网站出现这样的错误信息:Error Summary: HTTP Error 503.2 - Service UnavailableThe serverRuntime@appConcurrentRequ ...

  3. IIS 的最大并发数

    为了探寻IIS的最大并发数,先要做几个假设. 1.假设最大并发数就是当前的连接数.意思是当前能承受最大的连接,那么就表明最大的并发.2.假设IIS应用程序池处于默认状态,更改设置将会对最大连接数产生影 ...

  4. IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的

    IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫" ...

  5. 你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

    原文链接:http://www.cnblogs.com/yinhaichao/p/4060209.html?utm_source=tuicool&utm_medium=referral 一般购 ...

  6. IIS最大并发连接数 = 队列长度 + IIS最大并发工作线程数

    深入理解IIS的多线程工作机制   首先让我们来看看IIS里面的这2个数字:最大并发连接数,队列长度.先说这2个数字在哪里看. 最大并发连接数:在IIS中选中一个网站,右键网站名称,在右键菜单中找到并 ...

  7. 性能测试:通过设置注册表提高 P2P/IIS 并发数

    写在前面 在执行性能测试(如用 JMeter 直接压接口)的时候,有的时候并发数上不去.本机大面积出现 TCP 状态为 TIME_WAIT,除了放开 TCP 端口数和调整默认 TCP 释放时间外,另外 ...

  8. IIS webService 并发 性能

    IIS webService 并发 性能     做的WebService,客户压力测试500并发(随机步长60s-90s),响应速度不理想. 1,优化程序,压缩执行时间2,提高IIS“最大工作进程数 ...

  9. IIS 高并发的相关配置

    前言: 随着业务量的增加,服务器流量的增长增长了好多,高峰期会出现 503 的错误,IIS 对请求数的配置默认是 1000,无法满足现状的需求: 需要收集性能数据如下: 1.Windows性能监视器, ...

随机推荐

  1. JVM的监控命令

    JVM监控命令基本就是 jps.jstack.jmap.jhat.jstat 几个命令的使用就可以了 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外 ...

  2. Delphi下OpenGL2d绘图(06)-画图(多窗口、多视图、多个DC)

    一.前言 在学习OpenGL的过程中,发现很多函数都是全局的.前面几章中都是在一个窗口DC中画图,那么要在多个窗口画图,需要怎么处理呢?网上方法有多种,这里采用其中一种,利用wglMakeCurren ...

  3. IE浏览器上传文件后返回结果会自动弹出下载框

    服务器使用的是node,其它语言的后台没测试过. 在IE低版本浏览器下,当你上传一个文件后后台会返回一些数据,但是IE浏览器会弹出下载提示. 这个问题是之前处理的了,没有细究,今天有人问到这个问题,顺 ...

  4. [模板]选择排序&&冒泡排序&&插入排序

    #include<iostream> #include<cstdio> #include<bits/stdc++.h> using namespace std; v ...

  5. 实例-PHP_SELF、 SCRIPT_NAME、 REQUEST_URI区别-获取前台公用文-dirname-PHP的"魔术常量"-str_replace

    Part1:实例 $_SERVER[PHP_SELF], $_SERVER[SCRIPT_NAME], $_SERVER['REQUEST_URI'] 在用法上是非常相似的,他们返回的都是与当前正在使 ...

  6. Vim 技巧

    :r 文件名 导入另一文件到当前文件中 :! 命令 可以不退出当前编辑的文本而能执行系统的命令 自定义快捷键 注意这里的^P这个是ctrl + V + P :map ^P I//<ESC> ...

  7. IO流实现模拟软件试用的功能

    import java.io.*; public class TryOut { /** * IO流模拟软件试用次数的功能 * 这里注意try里BufferedOutputStream不要和InputS ...

  8. 快速幂取模(POJ 1995)

    http://poj.org/problem?id=1995 以这道题来分析一下快速幂取模 a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能 利用公式a*b%c ...

  9. Struts2 (四) — 拦截器

    一.拦截器 1.概述 1.1什么是拦截器 ​ 在struts2中,拦截器(Interceptor)是用来动态拦截Action执行的对象. ​ 拦截器有点类似以前Servlet阶段的Filter(过滤器 ...

  10. C++ STL:vector实现

    练习一发,主要是使用placement new在原始内存上创建对象.半路md面试电话来了,赶紧存档,看Java大法 #include <iostream> #include <cst ...