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

在IIS6上运行的ASP.NET Web应用程序定期将CPU高达100%。 W3WP负责这些剧集中几乎所有的CPU使用情况。 CPU在几分钟到一个多小时内都保持100%的固定状态。

这是在一个临时服务器上,这个站点现在只能从testing人员那里获得非常轻的stream量。

我们已经在服务器上运行了ANTS分析器,但是没有透露。

我们从哪里可以找出导致这些事件的原因以及在那段时间内哪些代码会使CPU处于繁忙状态?

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

这不是一个很好的答案,但你可能需要去旧学校,捕获IIS进程的映像快照并进行debugging。 您可能还想看看苔丝费兰德斯的博客 – 她是一个微软升级工程师,她的博客专注于debuggingWindows ASP.NET,但博客与Windowsdebugging相关。 如果你select了ASP.NET标签(这是我链接到的),那么你会看到几个相似的项目。

如果你的CPU达到100%并停留在那里,你可能会遇到死锁或无限循环。 分析器似乎是寻找无限循环的好select。 然而,僵局要难以追查。

Process Explorer是排除故障的极好工具。 您可以尝试使用它来查找CPU使用率过高的问题。 它让您深入了解您的应用程序的工作方式。

您也可以尝试Procdump转储过程并分析CPU上发生了什么。

我们有一个recursion查询,它将大量的数据转储到输出 – 你是否检查了所有的东西都退出并且没有无限循环?

可能试图用一个页面缩小它 – 我们发现ant在同样的情况下没有太大的帮助 – 我们最终做的是运行该网站打一页看CPU – 击中下一页看CPU – 非常有条不紊费时,但如果你找不到一些代码跟踪,你可能会运气不好 –

我们能够使用IIS日志文件将其追踪到一组怀疑的页面 –

希望有所帮助!

这是最好的猜测,但也许您的开发团队正在debugging模式下构build和部署应用程序,而不是释放模式。 这将导致.pdb文件的发生。 这意味着您的应用程序将占用额外的资源来收集系统执行期间的系统状态和debugging信息,从而导致更多的处理器利用率。

因此,确保他们正在以发布模式进行构build和部署将会非常简单。

我知道这是一个很老的post,但这也是一个普遍的问题。 所有build议的方法都非常好,但它们总是指向一个过程,而且我们已经知道我们的网站正在出现问题的机会很多,但是我们只是想知道具体的页面在处理中花费了多less时间。 我认为最精确和简单的工具是IIS本身。

  1. 只需在IIS的左侧窗格中单击您的服务器即可。
  2. 点击主窗格中的“工作进程”。 你已经看到了什么应用程序池正在占用太多的CPU。
  3. 双击此行(最后通过点击“全部显示”进行刷新),看看这个池中哪些页面消耗了太多的CPU时间('Time elapsed'列)

如果您确定需要花费时间加载的页面,请使用SharePoint的开发人员仪表板查看哪个组件需要时间。