我如何诊断IIS将CPU推到100%使用?

我有一个Web服务器上运行的几个ASP.NET网站。 每隔一段时间,我都注意到IIS将服务器的CPU推到100%。 这些站点共享应用程序池,每个.NET版本都在运行。

我正在寻找的是一种方法,能够确定哪个网站是这样做的,使用一些工具。 如果这个工具碰巧代码显示出来,那也不错。 如果不是,我很高兴知道哪个网站导致问题。

我已经尝试过使用ANTS。 但是,ant你需要知道它是哪个网站,然后让它运行,并在CPU崩溃的Web应用程序等待。 不完美的理想。

任何经验/想法?

有些人认为一个好的做法,创build一个应用程序池,每个网站/应用程序,所以当你需要重新启动一个网站不会影响其他人。 以同样的方式,它将创build一个新的IIS工作进程w3p.exe每个网站,通过这样做,我相信你可以更容易地监视每个我的网站峰值CPU。

然后要详细观察CPU使用情况,可以使用Miscrosft Sysinternal的Process Explorer,例如http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx这是一个很好的免费工具,可以收集信息你在看。

希望我的提示可以帮助解决IIS问题。

我已经在这里回答了完全相同的问题: IIS6 CPU Spiking

以下是我回答的文字:

多less个应用程序池? 您可以先将网站移到独立的应用程序池中,然后使用任务pipe理器+命令行iisapp来匹配哪个应用程序池匹配哪个任务。 这将帮助您确定从哪个网站开始。

一旦你有这个确定抓住微软的IISdebugging工具: http : //www.microsoft.com/download/en/details.aspx?id=26798

然后:

使用IISdebugging诊断来解决II6中的工作进程CPU使用率问题

在IIS7中失败的请求跟踪可以帮助跟踪网站的许多性能问题,但是我们仍然有广泛的IIS6客户群。 在Microsoft发布了一系列工具以更深入地分析堆栈跟踪之前,对IIS6中的性能问题进行故障排除一直相当困难。

IISdebugging诊断工具可以帮助跟踪工作进程的CPU和内存问题。 微软有一个很好的kb的文章,也通过基础知识: http : //support.microsoft.com/kb/919791 。

  1. 在系统上本地安装IISdebugging诊断程序。

  2. 在开始>程序> IIS诊断>debugging诊断工具>debugging诊断工具下打开debugging诊断工具。

  3. 单击工具>选项和设置>性能日志选项卡。 select启用性能计数器数据logging选项。 点击OK。

  4. 使用任务pipe理器来查找工作进程的PID。

  5. select进程选项卡,并在列表中find进程。

  6. 右键单击该进程并selectCreate Full Userdump。 这将需要几分钟的时间,并会popup一个框,为您提供转储文件的path。

  7. select高级分析选项卡,然后单击添加数据文件button。 浏览到跳转创build的转储文件,然后单击确定。

  8. 从“可用分析脚本”框中select“崩溃/挂起分析器”以查看CPU性能和崩溃分析。 点击开始分析。

几分钟后,将生成一个报告,其中包含堆栈跟踪信息以及有关执行时间超过90秒的任何请求的信息。 请注意,内存转储使用了几百MB的空间,因此请确保将该工具安装在具有足够debugging空间的驱动器上。 此外,如果该盒子负载过重,则可以在系统上创build用户转储,将文件复制到工作站,然后在本地执行分析。

有一个非常简单的方法,至less在IIS8中,不知道这是否存在于IIS6中。 无论如何,我认为这是有帮助的。

  • 你去IIS
  • select左侧的服务器
  • 点击图标工作进程
  • 查看每个应用程序的CPU /内存

工作者流程