iis7大型工作进程请求队列创build进程阻塞aspnet.config&machine.config修改(瓶颈)

ASP.net 2.0应用程序.net 2.0框架IIS7

我看到在“工作进程”选项下出现一大排“请求”。 logging的状态似乎是authentication请求和执行请求处理比其他任何东西都要多。

我修改了C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727(32位path和64位path)中的aspnet.config,包括:

maxConcurrentRequestsPerCPU="50000" maxConcurrentThreadsPerCPU="0" requestQueueLimit="50000" 

我已经修改了C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ CONFIG(32位和64位path)中的machine.config以包含:

 autoConfig="true" maxIoThreads="100" maxWorkerThreads="100" minIoThreads="50" minWorkerThreads="50" minFreeThreads="176" minLocalRequestFreeThreads="152" 

我仍然遇到这个问题。

这个问题performance为工作进程队列中的大量进程。

发生此问题时,当前到网站的连接数显示500。 我不认为我看到并发连接超过500没有发生这个问题。

Web应用程序的请求块变慢。

刷新应用程序池解决了一段时间(如预期的),负载分散在两个池之间。

问题FIXED REQUEST中的应用程序池已设置为在50000上刷新。

感谢您的任何帮助。 斯科特

快速编辑说嗯,我的发明者告诉我,该项目是build立在.net 3.5框架。 看着

C:\ WINDOWS \ Microsoft.NET \ Framework64 \ V3.5

似乎没有一个ASPNET.CONFIG或MACHINE.CONFIG ….有3.5相当于?

经过一番search之后3.5使用3.5缺less的2.0框架文件。

所以回到原来的问题,我的瓶颈在哪里?

IIS优化和性能调优是一个相当广泛的话题,您的瓶颈可能在几个地方。

首先,您可以使用性能监视器更好地确定您的瓶颈。

根据您在那里find的内容,您可以继续尝试以下IIS性能优化选项:

  1. 使用IIS压缩。
  2. 至less启用静态caching,并启用dynamiccaching,如果这样做是有道理的。
  3. 调整您的Aspnet.config文件和machine.config文件以及您的应用程序的web.config连接string 。

在web.config中检查连接string

默认情况下,web.config文件中连接string的最大池大小为100,因此请尝试指定更高的值,如"Max Pool Size=200; Min Pool Size=10; Connect Timeout=45;"最小池大小"Max Pool Size=200; Min Pool Size=10; Connect Timeout=45;"

例:

<add name="SiteSqlServer" connectionString="Server=mydomain.com;Initial Catalog=myDB;User ID=DB;Password=myDB;Max Pool Size=100;Min Pool Size=10;Connect Timeout=45;" providerName="System.Data.SqlClient" />


在Aspnet.config中检查您的设置

位置: C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727

例:

 <system.web> <applicationPool maxConcurrentRequestsPerCPU="5000" <!-- Default is 12 --> maxConcurrentThreadsPerCPU="0" <!-- Default is 0 --> requestQueueLimit="5000" <!-- Default is 5000 -->/> </system.web> 

在machine.config中检查您的设置

位置: C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIGC:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ CONFIG


中processModel

例:

 <processModel enable="true" requestQueueLimit="5000" <!-- Adjust if necessary. Default 5000 --> restartQueueLimit="10" <!-- Adjust if necessary. Default 10 --> memoryLimit="60" <!-- Adjust if necessary. Lower for memory leaks. --> maxWorkerThreads="100" <!-- Default 20 --> maxIoThreads="100" <!-- Default 20 --> minWorkerThreads="40" <!-- Default 1 --> minIoThreads="30" <!-- Default 1 --> /> 

connectionManagement

例:

 <system.net> <connectionManagement> <add address="*" maxconnection="100" <!-- Default is 2 --> /> </connectionManagement> </system.net> 

您可能会稍微改变服务器的方式,但在这种情况下,听起来真的是代码问题。 有些东西阻止代码以时间轴的方式完成,导致请求build立。

使用您的工作进程队列来确定哪个页面构build时间最长。 它可能是一个页面,或一个页面的模式,或者如果不是,那么通常在顶部有一个页面,其他所有页面都是这样。

debugging诊断是一个伟大的工具,更高级的故障排除隔离locking页面。

你是对的框架版本。 .NET 3.0和3.5是2.0的扩展。 直到4.0版本才有了一个全新的框架版本以及相应的aspnet_isapi.dll和其他核心文件。