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

sco*_*tus 3 iis performance iis-7 asp.net

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

我看到一个大的“请求”队列出现在“工作进程”选项下。记录的状态似乎是 Authenticate Request 和 Execute Request Handles 比什么都重要。

我已经修改了 C:\Windows\Microsoft.NET\Framework64\v2.0.50727(32 位路径和 64 位路径)中的 aspnet.config 以包括:

  maxConcurrentRequestsPerCPU="50000" 
  maxConcurrentThreadsPerCPU="0" 
  requestQueueLimit="50000"
Run Code Online (Sandbox Code Playgroud)

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

autoConfig="true"
maxIoThreads="100"              
maxWorkerThreads="100"
minIoThreads="50"
minWorkerThreads="50"

    minFreeThreads="176" 
    minLocalRequestFreeThreads="152" 
Run Code Online (Sandbox Code Playgroud)

我仍然明白这个问题。

该问题表现为工作进程队列中有大量进程。

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

Web 应用程序随着请求块而变慢。

随着负载在两个池之间分布,刷新应用程序池会解决一段时间(如预期)。

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

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

快速编辑说嗯,我的开发人员告诉我该项目是用 .net 3.5 框架构建的。看着

C:\Windows\Microsoft.NET\Framework64\v3.5

似乎没有 ASPNET.CONFIG 或 MACHINE.CONFIG .... 是否有 3.5 等价物?

经过一番搜索,显然 3.5 使用了 3.5 缺少的 2.0 框架文件。

那么回到最初的问题,我的瓶颈在哪里?

tac*_*day 5

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

首先,您可以使用Performance Monitor更好地确定瓶颈是什么。

根据您在那里找到的内容,您可以继续尝试以下 IIS 性能调整选项:

  1. 使用 IIS 压缩。
  2. 至少启用静态缓存,并在有意义的情况下启用动态缓存。
  3. 为您的应用程序调整您的 Aspnet.config 文件machine.config 文件以及 web.config 连接字符串

检查 web.config 中的连接字符串

默认情况下,web.config 文件中连接字符串的最大池大小为 100,因此请尝试指定更高的值,例如"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>
Run Code Online (Sandbox Code Playgroud)

检查 machine.config 中的设置

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


流程模型

例子:

<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 -->
/>
Run Code Online (Sandbox Code Playgroud)

连接管理

例子:

<system.net>
  <connectionManagement>
    <add address="*" maxconnection="100" <!-- Default is 2 --> />
  </connectionManagement>
</system.net>
Run Code Online (Sandbox Code Playgroud)