C# 使用IIS 7导致CPU峰值的应用程序进程

C# 使用IIS 7导致CPU峰值的应用程序进程,c#,.net,iis,windows-server-2012,C#,.net,Iis,Windows Server 2012,我正在解决生产中的一个应用程序的一个问题,该问题导致CPU出现尖峰和引脚。它似乎会逐渐增加CPU使用率,直到达到100%(通常在24-36小时内),我一直无法找到导致此问题的确切代码。我使用IIS 7识别了导致问题的应用程序池。内存使用是正常的,但通常有几个工作进程被冻结。在过去的一周里,我一直跟踪这些冻结的过程,没有任何模式可以帮助缩小问题的范围。冻结的页面总是不同的,用户IP也总是不同的。除了回收应用程序池之外,是否还有其他应用程序池设置,我可以使用它在X时间后杀死这些冻结的工作进程 回收应

我正在解决生产中的一个应用程序的一个问题,该问题导致CPU出现尖峰和引脚。它似乎会逐渐增加CPU使用率,直到达到100%(通常在24-36小时内),我一直无法找到导致此问题的确切代码。我使用IIS 7识别了导致问题的应用程序池。内存使用是正常的,但通常有几个工作进程被冻结。在过去的一周里,我一直跟踪这些冻结的过程,没有任何模式可以帮助缩小问题的范围。冻结的页面总是不同的,用户IP也总是不同的。除了回收应用程序池之外,是否还有其他应用程序池设置,我可以使用它在X时间后杀死这些冻结的工作进程

回收应用程序池可以解决您的问题吗?可以将回收时间更改为默认值29小时以外的时间。但是,它确实解决了问题;我担心的是它会杀死任何活动会话。即使CPU固定在80%,应用程序上的用户也不会出现性能下降。我更愿意杀死有问题的进程,而不是每4小时左右循环一次应用程序池,这可能会导致其他活动用户出现问题。您可以尝试启用,可能会缩短超时时间。如果工作进程实际上仍然是响应性的,只是占用了不公平的资源份额,那么这可能没有帮助,但值得一试。当然,最好的长期解决方案是找到并修复问题,但这需要更多的工作,包括转储工作进程并通过调试器运行它(windbg可以通过
!runaway
)找到最活跃的线程)。这有一点学习曲线。说到转储,您还可以使用在CPU或内存使用达到阈值后显式地自动启动转储(并使用
-k
终止进程)。要使其工作,工作进程必须单独超过某个阈值,而不仅仅是它们太多。