工人进程占用较高的CPU%

| 我所有的网站都托管在IIS中,并配置了一个应用程序池。该应用程序池包含10个正在运行的网站。 到今天为止一切正常,但突然间我发现CPU使用率突然上升和下降%。我无法找出问题所在。 无论如何,在应用程序池中是否要检查哪个网站正在承担很多负载?     
已邀请:
性能计数器,任务管理器和本机代码分析工具仅说明了部分情况。为了对ASP.NET应用程序内部发生的事情有更深入的了解,您需要使用WinDBG,SOS和ADPlus。 苔丝·费兰德斯(Tess Ferrandez)撰写了一系列有关追究应归咎于何处的文章:   .NET调试演示实验4:高CPU挂起率   .NET调试演示实验4:高CPU占用率-回顾 这是一个真实的例子:   使用静态Generic.Dictionary的.NET应用程序中的高CPU 您可能需要将站点划分为单独的应用程序池,以便您可以识别并隔离导致CPU占用过多的站点(但是您似乎已经怀疑了,因此我将其隔离了)。从那时起,您可以按照Tess的建议和指导来查找原因。 您还应该查看日志,看看是否遇到意外的高峰或流量增加。也许有一个行为不端的搜索引擎网站索引器正在钉牢该网站。如果真是这样,那么您可能需要(如果尚未这样做)创建一个“ 0”,以防止搜寻器将不需要索引的网站部分编制索引。最重要的是,如果某些爬虫过于繁琐,那就禁止它们。也许考虑让Google驯服和调整其活动的站点地图。     
如果您的服务器已达到其最大容量,您将看到CPU不稳定地上升和下降,因为GC将开始尝试恢复资源(cache..etc),这反过来又会使您的站点更加努力地工作。这是一个无尽的循环。 您是否一直在监视绩效指标?您是否知道网站的正常容量?如果您不能回答这些问题,建议您尽快收集一些性能数据。 我的经验法则是始终先进行测量,然后进行必要的更改。 大多数时候,性能瓶颈并不是您认为的那样。     
实际上没有性能计数器的方法可以告诉您,因为CPU计数器处于进程级别。最好的选择是与事件日志和用于垃圾收集,请求等的.NET / ASP.NET计数器中的其他事件进行时间关联。 如果您真的想成为铁杆,可以使用SysInternals工具集随时间推移获取应用程序池的快照,然后进行后期分析以找出尖峰发生时执行了什么代码。这是Mark Russinovich的博客-http://blogs.technet.com/b/markrussinovich/archive/2008/04/07/3031251.aspx的相关示例。     

要回复问题请先登录注册