[转]IIS7.5优化--提升线程数来适应高并发

根据压测结果作出的修改历史:

第一步:只针对maxWorkerThreads、maxIoThreads和minWorkerThreads作了修改<processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" />,发现并没有明显性能提高。html

第二步:针对第一步,提升了三个参数的值maxWorkerThreads="200" maxIoThreads="200" minWorkerThreads="100" 。而且修改了“每一个处理器的线程数限制”,从默认值25提升到50,顺便修改了队列长度从3000到30000。此时,性能有明显提高。web

第三步(未执行):修改应用程序池的“最大工做进程数”,即便用IIS的Web Garden功能(多工做进程模式)。后端

 

总结:一开始只是提升了IIS的最大、最小线程数,可是因为ASP的每一个处理器的线程数限制(25),因此性能并无明显提高。后来提升了ASP的每一个处理器的线程数限制,性能才有明显好转,但直接表现是站点进程的CPU和使用线程数明显升高,致使服务器自己负载飙升。目前这种较为粗暴的直接增大参数指标的优化方式比较适用于服务器上的单站点或者单个负载较高的站点,若是一台服务器上有几个负载加高的站点,会致使服务器自己资源损耗严重反而影响站点的处理能力,第三步的Web Garden尤其明显。因此,应该持续压测、观察来找到一个较为适合咱们服务器和站点结构的参数配置。服务器

 

如下参考文档是对以上参数的释义及修改方法:

一、maxWorkerThreads、maxIoThreads

ASP.NET 使用如下两个配置设置来限制工做线程和完成线程所使用的最大数目︰并发

配置文件:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
修改参数: <processModel autoConfig="false" maxWorkerThreads="200" maxIoThreads="200" minWorkerThreads="100" />ide

MaxWorkerThreads参数和maxIoThreads参数隐式地乘以 Cpu 的数量。例如,若是您有两个处理器,是如下的最大工做线程数︰高并发

2*maxWorkerThreads
 

二、minWorkerThreads

从 ASP.NET 1.0 Service Pack 3 和 ASP.NET 1.1 中,ASP.NET 还包含如下肯定多少工做线程可能会使可当即用于远程请求提供服务的配置设置。
<processModel minWorkerThreads="1">
此设置控制的线程能够在更快的速度比从 CLR 的默认"线程优化"功能建立的辅助线程建立。可能忽然填充 ASP.NET 请求队列的后端服务器上的 slow-down 因为此设置启用 ASP.NET 服务请求、 请求来自客户端,或其它相似忽然爆发,会致使在队列中的请求数量忽然上升。MinWorkerThreads参数的默认值为 1。咱们建议您将minWorkerThreads参数的值设置为下面的值。
minWorkerThreads = maxWorkerThreads / 2
默认状况下,不存在 Web.config 文件或 Machine.config 文件中的minWorkerThreads参数。此设置隐式乘以

三、优化每一个处理器限制对线程 ASP 属性的值(默认25,已修改为50)

ASP处理器限制每一个线程属性指定的最大工做线程为每一个 IIS 建立的处理器数。 以前的处理器使用率知足至少 50%或更高版本,应增长处理器限制每一个线程的值。 此设置可能大大会影响 Web 应用程序的可伸缩性和服务器的性能一般。 由于此属性定义的最大能够同时执行的 ASP 请求数,此设置应保持为默认值,除非你 ASP 应用程序进行扩展的外部组件调用。 在这种状况下,可能会增长处理器限制每一个线程的值。 这样作将使要建立更多的线程,以处理更多的并发请求的服务器。 处理器限制每一个线程的默认值为 25。 此属性的最大建议的值为 100。工具

若要增长处理器限制每一个线程的值,请执行如下步骤: 在链接窗格中,选择 web 服务器,请单击以选中功能视图,而后双击ASP功能。性能

  1. 单击启动,指向全部程序,单击管理工具,而后单击Internet Information Services (IIS) Manager.优化

  2. 在链接窗格中,选择 web 服务器,请单击以选中功能视图,而后双击ASP功能。

  3. 单击以展开限制属性下行为,单击处理器限制每一个线程,输入所需的值线程每一个处理器限制单击应用中操做窗格。

四、优化 ASP 队列长度属性的值(默认3000,已修改为30000)

优化此属性的目标是确保良好的响应时间,同时最小化 ASP 请求队列已满时,服务器频率发送到客户端的 HTTP 503 (服务器太忙) 错误。 若是 ASP 队列长度属性的值过低,则服务器将使用更高的频率发送 HTTP 503 错误。 若是 ASP 队列长度属性的值太高,因此用户可能会认为,服务器没有响应时实际上他们的请求正在等待队列中。 经过在高流量期间观看队列,你应识别 web 请求高峰和低谷的模式。 记下的峰值值,并设置正上方的峰值值 ASP 队列长度属性的值。 使用队列以处理短时间峰值,请确保响应时间,并限制系统,从而避免重载时持续,出现意外的峰值。 若是你没有用于调整 ASP 队列长度属性的数据,将是很好的起点将队列一对一比率设置为线程的总数。 例如,若是每一个处理器限制对线程 ASP 属性设为 25,具备四个处理器 (4 * 25 = 100 线程),将 ASP 队列长度属性设置为 100 并从该处优化。

若要增长队列长度的值属性,请按照下列步骤:

  1. 单击启动,指向全部程序,单击管理工具,而后单击Internet Information Services (IIS) Manager.

  2. 在链接窗格中,选择 Web 服务器,请单击以选中功能视图,而后双击ASP功能。

  3. 单击以展开限制属性下行为,单击队列长度,输入所需的值队列长度,而后单击应用中操做窗格

五、Web Garden

 IIS默认配置下采用的是单工做进程的工做模式,也就是只启用一个w3wp.exe进程处理全部请求,而后进程内启用多个线程来处理并发请求,最大工做线程数由具体的操做系统和IIS来决定,当并发量大于线程数时则会让请求排队等待处理。这是面对高并发量,且部分请求处理耗时较长时就会形成大部分请求长期处于挂起的状态,直接反应就是慢或者超时。

 

参考连接:

https://support.microsoft.com/zh-cn/help/821268/contention--poor-performance--and-deadlocks-when-you-make-calls-to-web

https://docs.microsoft.com/zh-cn/biztalk/technical-guides/optimizing-iis-performance

http://www.cnblogs.com/tianguook/p/5204757.html

相关文章
相关标签/搜索