W3WP.EXE使用100%CPU - 从哪里开始?

Her*_*ill 54 asp.net profiling w3wp red-gate-ants

在IIS6上运行的ASP.NET Web应用程序会定期向CPU发送高达100%的CPU.在这些剧集中,W3WP几乎负责所有CPU的使用.CPU在几分钟到一个多小时的任何地方都保持100%固定.

这是在登台服务器上,此时该站点只能从测试人员获得非常轻的流量.

我们在服务器上运行ANTS分析器,但它一直没有启发.

我们在哪里可以开始找出造成这些剧集的原因以及在这段时间内CPU保持繁忙的代码?

Ric*_*kNZ 36

  1. 标准Windows性能计数器(查找其他相关活动,例如许多GET请求,过多的网络或磁盘I/O等); 您可以从代码以及perfmon中读取它们(例如,如果CPU使用超过阈值,则触发数据收集)
  2. 自定义性能计数器(特别是对于离线请求和执行时间不确定的其他调用的时间)
  3. 使用Visual Studio Team Test或WCAT等工具进行负载测试
  4. 如果您可以测试或升级到IIS 7,则可以配置"失败的请求跟踪"以在请求需要更长时间的情况下生成跟踪
  5. 使用logparser查看CPU峰值时到达的请求
  6. 代码审查/演练(特别是查找可能无法正确终止的循环,例如发生错误,以及锁定和潜在的线程问题,例如使用静态)
  7. CPU和内存分析(在生产系统上可能很难)
  8. Process Explorer
  9. Windows资源监视器
  10. 详细的错误记录
  11. 自定义跟踪日志记录,包括执行时间详细信息(可能是有条件的,基于CPU使用的perf计数器)
  12. AppPool回收时是否发生错误?如果是这样,那可能是一个线索.

  • 我只是添加记录,最终把我们带到了问题的根源:**SQL Profiler**.我们有一个复杂的LINQ to SQL查询,其中包含对内存中对象的引用,因此它无法将整个查询转换为内存,而是开始执行数千个小SQL查询来执行连接. (6认同)

Mic*_*ray 12

这不是一个很好的答案,但您可能需要上学并捕获IIS进程的映像快照并进行调试.您可能还想查看Tess Ferrandez的博客 - 她是一名​​*微软升级工程师,她的博客专注于调试Windows ASP.NET,但该博客通常与Windows调试相关.如果您选择ASP.NET标记(这是我链接到的),那么您将看到几个相似的项目.