iis7 大型工作进程请求队列创建进程阻止 aspnet.config 和 machine.config 修改(瓶颈)

iis7 大型工作进程请求队列创建进程阻止 aspnet.config 和 machine.config 修改(瓶颈)

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

我看到“工作进程”选项下出现了一大堆“请求”。记录的状态似乎主要是验证请求和执行请求句柄。

我已修改 C:\Windows\Microsoft.NET\Framework64\v2.0.50727 (32 位路径和 64 位路径)中的 aspnet.config,其中包含:

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

我已修改 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" 

我仍然遇到这个问题。

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

出现此问题时,当前网站连接数显示为 500。我认为我从未见过并发连接数超过 500 而不出现此问题的情况。

由于请求阻塞,Web 应用程序变慢。

由于负载分散在两个池之间,刷新应用程序池需要一段时间(如预期)。

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

感谢您的帮助。斯科特

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

目录:\Windows\Microsoft.NET\Framework64\v3.5

似乎没有 ASPNET.CONFIG 或 MACHINE.CONFIG ....是否有 3.5 等效版本?

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

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

答案1

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

首先,你可以使用以下方法更好地确定你的瓶颈是什么:性能监视器

根据您在此处找到的内容,您可以继续尝试以下 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 中的设置

地点:目录:\Windows\Microsoft.NET\Framework\v2.0.50727目录:\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 中的设置

地点: 目录:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG目录:\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 -->
/>

连接管理

例子:

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

答案2

您可能能够通过服务器更改取得一些进展,但在这种情况下,真正的问题似乎出在代码上。某些因素阻碍了代码按时完成,从而导致请求构建。

使用工作进程队列来判断哪个页面的构建时间最长。它可能是单个页面,也可能是页面模式,如果不是,那么通常顶部有一个页面会拖慢其他页面的构建时间。

Debug Diag 是一款出色的工具,可用于进行更高级的故障排除以隔离锁定页面。

您对框架版本的看法是正确的。.NET 3.0 和 3.5 是 2.0 的扩展。直到 4.0 才有一个全新的框架版本,并带有相应的 aspnet_isapi.dll 和其他核心文件。

相关内容