IIS应用程序池尽管没有请求,但CPU使用率很高


10

我最近将一组Windows Server 2008 R2 / IIS 7.5服务器迁移到了运行Windows Server 2012 / IIS 8的新服务器上。

我正在从IIS中遇到一些奇怪的行为。我们有2个相同的服务器,每个服务器运行2个网站,每个网站都在自己的应用程序池中。每个网站的代码都是相同的。(实际上...相同的dll和所有内容,只是配置略有不同)。

应用程序池设置为每24小时按计划回收,但是在这24小时内,w3wp worker进程的CPU使用率以12.5%的增量跳跃(服务器有8个处理器,所以我认为这不是巧合)。

一旦CPU使用率上升,在应用程序回收之前,它不会下降。据我所知,该应用目前不执行任何操作,也没有处理任何请求。我可以阻止所有流向服务器的流量,CPU使用率将保持不变。我什至可以重新启动该网站,并且CPU使用率保持不变。重置CPU使用率的唯一方法是回收或重新启动运行它的应用程序池。

我可以肯定地说,这个问题与我的代码无关,但是某种形式的IIS配置不佳或IIS 8中的某个更改与硬件配置不能很好地配合?

不知道它是否重要,但是这些是Rackspace Performance Cloud服务器。

下面的屏幕快照显示了这些服务器上的CPU负载(绿色箭头表示应用程序池回收的时间。您可以看到每个平稳段都是12.5%的整数倍:

在此处输入图片说明

有没有人观察到这种行为?我从2009年开始就发现这个问题,当时有人遇到了与IIS 6相同的问题:

IIS w3wp使用高cpu,没有流量

任何帮助深表感谢

Answers:


1

在2012年与Sharepoint 2013和IIS 8发生了完全相同的问题...我们从不打扰,但在2008 R2上降级为SP2013,一切都很好。


2
人。在我刚刚完成迁移工作之后,这不是我希望得到的答案……:/
Leland Richardson 2014年

1

您可以尝试使用Debug Diagnostic工具查找导致问题的原因。通常用于故障排除和内存泄漏,但可以帮助查找导致问题的组件。


何时以编程方式使用调试诊断工具high CPU or RAM more 90%
Kiquenet '18

@Kiquenet您可以尝试对进程进行内存转储,然后在其他计算机上进行分析。我面临类似的问题,并且能够在
不到

是的,然后以编程方式在不到100%的CPU使用率下在一分钟内捕获服务器上的转储吗?
Kiquenet

1

确实看起来像是陷入无限循环的某些代码。

一个请求进入,IIS开始处理它,某种(可能是一个错误)触发了此行为,工作线程进入无限循环并将​​CPU占用率固定为100%,然后一直保持这种状态,直到应用程序池被回收为止。

即使没有新的请求进入,CPU仍在使用,因为被卡住的线程永远不会真正终止。

有时,新请求会再次触发此行为,然后您将遇到两个卡住的CPU(或三个或四个...)。

回收应用程序池当然会终止所有工作线程,因此问题得以解决...直到再次发生。


0

您可以将CPU事件探查器附加到w3wp进程,并查看其中发生了什么。您应该能够看到哪些消耗了CPU周期。


高CPU或RAM的90%以上时,如何以编程方式将CPU Profiler附加到w3wp进程?
Kiquenet '18年

0

对我来说似乎是一个无限循环。尽管IIS表示没有未解决的请求,但我已经看过几次了。我不确定那是怎么回事,但这正是您所看到的。困难的部分是IIS在完成请求之前不会记录请求,因此很难找出触发该行为的请求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.