C# IIS ASP.net应用程序突然挂起请求
我们有一个asp.net应用程序在IIS 8.5上运行,当出现高流量时,大约1分钟内,“请求队列”开始增长,处理器时间减少,请查看性能监视器图表: 奇怪的是,没有应用程序重启、503或IIS循环发生,那么这可能是什么呢?是什么突然让IIS暂停请求一段时间?除了图形,您还可以看到Windows的内存看起来正常且稳定 以下是一些环境配置: 应用程序池队列长度:10000(没有503,所以我认为可能不是这个) Asp.net配置:C# IIS ASP.net应用程序突然挂起请求,c#,asp.net,.net,iis,signalr,C#,Asp.net,.net,Iis,Signalr,我们有一个asp.net应用程序在IIS 8.5上运行,当出现高流量时,大约1分钟内,“请求队列”开始增长,处理器时间减少,请查看性能监视器图表: 奇怪的是,没有应用程序重启、503或IIS循环发生,那么这可能是什么呢?是什么突然让IIS暂停请求一段时间?除了图形,您还可以看到Windows的内存看起来正常且稳定 以下是一些环境配置: 应用程序池队列长度:10000(没有503,所以我认为可能不是这个) Asp.net配置: <system.web> <appli
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="999999" />
</system.web>
machine.config:
<processModel autoConfig="false" requestQueueLimit="250000"/>
我们这样配置是因为我们的应用程序使用了很多信号器
应用程序使用Azure SQL Server和Azure Redis,但这不是问题所在,因为另一个虚拟机(使用相同的应用程序)在同一时刻没有显示问题
另一个技巧是:在同一个VM中,我们有相同的应用程序,但在另一个应用程序池和另一个行为相同的域中
任何帮助都将不胜感激,这让我发疯
谢谢 您是否遵循了Redis提供的有关配置线程池增长设置的建议,请参阅。有类似的问题。在您描述的环境中,我将看以下几点
希望它有帮助。当问题发生时,您可以对进程进行内存转储(一种方法是使用任务管理器),尽管如果计算机上运行多个IIS应用程序池,找到正确的进程进行内存转储可能并不简单 如果您有VisualStudioEnterprise,那么它将为您提供一个很好的UI来分析转储。它将显示运行该进程的所有线程以及内存转储时的调用堆栈。您可能会发现大多数.NET线程都有类似的调用堆栈,这很可能是造成瓶颈的原因
如果您没有Visual Studio Enterprise,那么我认为您仍然可以使用WinDbg打开它,但它是一个CLI工具,我不知道命令,因此您需要查找它。在图形中添加另一个计数器:专用字节。此数字将告诉您所有托管堆中的所有字节数+非托管字节数。如果这个数字持续增加,那么你的某个地方有内存泄漏。确保正确处置所有一次性物品,并且物品在G3收集之前不会保存。无论如何,我会从那里开始,如果这是一个问题,我会开始调查,看看有什么泄漏。您是否已经在应用程序中查找了问题?有没有办法让它死锁?它是否连接到数据库服务器?数据库还可用吗?嗨@Peter,应用程序非常庞大,我们需要一些提示来开始查看。这与数据库无关,因为另一个虚拟机不会在同一时刻显示此问题。请尝试了解应用程序挂起时正在执行的操作。process explorer的threads选项卡可能是一个esay开始:我在上面添加了更多信息。你认为线程已经达到极限并挂起应用程序了吗?@Alexandre正在检查,没有选择其他扩展选项?因为您的情况(如果不是应用程序死锁)是99.9%的扩展问题。我们最近遇到了同样的问题。是的,我在问题中描述了这一点。