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 性能调整选项:
- 使用 IIS 压缩。
- 至少启用静止的缓存,并启用动态的如果有意义的话,则进行缓存。
- 调整 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 和其他核心文件。