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

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

我遇到了一些来自IIS的奇怪行为。 我们有2个相同的服务器,每个服务器运行2个网站,每个网站都有自己的应用程序池。 每个网站的代码是相同的。 (字面上…相同的DLL和一切,只是略有不同的configuration)。

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

一旦CPU使用率上升,它不会回落,直到应用程序回收。 据我所知,该应用程序是什么都没有做,并在这个时候处理任何请求。 我可以阻止到服务器的所有stream量,CPU使用率将停留在那里。 我甚至可以重新启动网站,并且CPU使用率保持不变。 重置CPU使用率的唯一方法是回收或重新启动运行的应用程序池。

我有点确定,这个问题与我的代码没有任何关系,但是某种不好的IISconfiguration,或者IIS 8的改变在硬件configuration方面工作不佳或什么的?

不确定是否重要,但这些是Rackspace Performance Cloud服务器。

下面是一个屏幕截图,向您展示这些服务器上的CPU负载(绿色箭头指向应用程序池回收的时间),您可以看到每个平台是12.5%的整数倍:

在这里输入图像描述

有没有人观察过这种行为? 我从2009年发现了这个问题,与某些人似乎是与IIS 6相同的问题:

IIS w3wp使用高CPU没有stream量

任何帮助深表感谢

在2012年有与Sharepoint 2013和IIS 8完全相同的问题…我们从来没有麻烦,而是在2008 R2降级到SP2013,一切都很好。

真的看起来像一些代码卡在一个无限循环。

一个请求来了,IIS开始提供服务,一些东西(可能是一个bug)触发了这个行为,一个工作线程进入一个无限循环,并把CPU挂到100%,然后它只是停留在这个方式,直到应用程序池被回收。

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

有时候一个新的请求再次触发这个行为,然后你得到两个卡住的CPU(或者三个或四个…)。

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

你可以附加一个CPU分析器到w3wp进程,看看里面发生了什么。 你应该能够看到什么消耗CPU周期。

您可以尝试使用“ debugging诊断”工具来追踪导致问题的原因。 它通常用于排除崩溃和内存泄漏故障,但可以帮助查找哪个组件导致问题。

看起来像一个无限循环给我。 尽pipeIIS说没有任何未完成的请求,但我已经看过几次了。 我不确定这是怎么回事,但这正是你所看到的。 难点在于IIS在完成之前不会logging请求,因此找出哪个请求触发这个行为是很困难的。