工作进程占用高CPU%

时间:2011-04-15 17:34:12

标签: asp.net iis pool

我的所有网站都托管在IIS中,并配置了一个应用程序池。此应用程序池包含10个正在运行的网站。

直到今天工作正常,但突然之间我观察到CPU使用率突然上下下降。我无法追查问题。

无论如何都要检查哪个网站在应用程序池中占用了很多负载?

3 个答案:

答案 0 :(得分:1)

性能计数器,任务管理器和本机代码分析工具只能说明故事的一部分。要深入了解ASP.NET应用程序中发生的事情,您需要使用WinDBG,SOS和ADPlus。

Tess Ferrandez有一系列关于追踪应该归咎于什么的文章:

  

.NET Debugging Demos Lab 4: High CPU hang
  .NET Debugging Demos Lab 4: High CPU Hang - Review

这是一个真实世界的例子:

  

High CPU in .NET app using a static Generic.Dictionary

您可能希望将您的站点分成单独的应用程序池,以便您可以识别并隔离导致高CPU的站点(但看起来您已经怀疑,因此我将其隔离出来)。从那时起,您可以按照苔丝的建议和指导来追踪原因。

您还应该查看日志,看看您是否遇到意外的峰值或流量增加。也许有一个表现不佳的搜索引擎网站索引器钉在网站上。如果是这种情况,那么您可能需要(如果您还没有这样做)创建robots.txt以防止抓取工具索引不需要编制索引的网站部分。最重要的是,如果某些爬行者过于苛刻,那么就禁止他们。也许考虑使用谷歌的站点地图来驯服和调整其活动。

答案 1 :(得分:0)

如果您的服务器已达到最大容量,您将看到CPU上下不稳定,因为GC将开始尝试恢复资源(cache..etc),这反过来会导致您的网站更加困难。这是一个无休止的循环。

您是否一直在监控您的表现计数器?您是否知道您网站的正常容量是多少?如果您无法回答这些问题,我建议您尽快收集一些性能数据。

我的经验法则是始终先测量,然后进行必要的更改。

大多数情况下,性能瓶颈并不是您认为的那样。

答案 2 :(得分:0)

实际上没有性能计数器方法可以告诉,因为CPU计数器处于进程级别。最好的办法是与事件日志中的其他事件和.NET / ASP.NET计数器进行时间核心处理,以进行垃圾收集,请求等。

如果你真的想要硬核,你可以使用SysInternals工具集随着时间的推移拍摄你的应用程序池的快照,然后进行后期分析,以确定在峰值发生时执行了什么代码。以下是Mark Russinovich博客的相关示例 - http://blogs.technet.com/b/markrussinovich/archive/2008/04/07/3031251.aspx