原文链接 http://www.cnblogs.com/dudu/p/3761659.html
一、IIS:应用程序池队列(Application pool queue,位于HTTP.SYS)
这是请求到达IIS后遇到的第一个队列,http.sys收到请求后会将请求放入对应的应用程序池队列,这样可以减少上下文的切换。需要注意的是应用程序池队列虽然是给w3wp进程用的,但它存在于http.sys的内存区(http.sys是一个运行于kernel-mode的设备驱动程序)。如果把http.sys比作一块网卡,那应用程序池队列相当于网卡的缓冲区。
1)设置方法:在IIS应用程池设置中设置Queue Length的值(缺省值是1000)。
2)监测方法:Windows性能监视器中监测Http Service Request Queues\ArriveRate。
3)出队方法:工作者进程(w3wp,user-mode)通过完成端口(completion port)从应用程序池队列中取出请求进行处理(user-mode与kernel-mode之间的通信),需要注意的是这里进行了IO操作。
二、ASP.NET:CLR线程池队列(CLR threadpool queue)
w3wp从应用程序池队列中取出请求后,接下来就是从CLR线程池中捞出一个CLR线程处理请求,如果池中空无一线,就会将请求放在CLR线程池队列中。
1)设置方法:在machine.config中设置processModel/requestQueueLimit(默认是1000),或者Aspnet.config中设置applicationPool。
<processModel enable="true" requestQueueLimit="2000" >
2)监测方法:Windows性能监视器中监测ASP.NET v4.0.30319\Requests Queued。
【参考资料】
Understanding IIS 7.0 Architecture : IIS 7.0 Core Components
Everything you ever wanted to know about ASP.NET request queueing
支持高并发的IIS设置
1. 调整IIS 7应用程序池队列长度
由原来的默认1000改为65535。
IIS Manager > ApplicationPools > Advanced Settings
Queue Length : 65535
2. 调整IIS 7的appConcurrentRequestLimit设置
由原来的默认5000改为100000。
c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000
在%systemroot%\System32\inetsrv\config\applicationHost.config中可以查看到该设置:
<serverRuntime appConcurrentRequestLimit="100000" />
3. 调整machine.config中的processModel>requestQueueLimit的设置
由原来的默认5000改为100000。
<configuration> <system.web> <processModel enable="true" requestQueueLimit="100000"/>
参考文章:http://technet.microsoft.com/en-us/library/dd425294(office.13).aspx
4. 修改注册表,调整IIS 7支持的同时TCPIP连接数
由原来的默认5000改为100000。
reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000
5. 运行命令使用设置生效
net stop http & net start http & iisreset