监控并创建W3WP.exe日志处理CPU利用率,并在CPU峰值超过50%时请求URL

时间:2016-07-06 09:30:33

标签: visual-studio iis w3wp

在我们的应用程序中,有更多的2000页面部署在prod服务器中。有时当用户浏览某个URL时,CPU峰值超过70%。我找不到它何时发生以及哪个URL创建它。因此,任何人都可以告诉我最好的开源工具来监视和创建W3WP.exe处理CPU利用率的日志,并在CPU峰值超过50%时请求URL。

2 个答案:

答案 0 :(得分:2)

procdump + windbg

有一个名为procdump的sysinternals工具,可以在cpu超过阈值时自动创建进程的内存转储以进行分析。

从命令行用法:

-c  CPU threshold at which to create a dump of the process.

进行进程转储后,您需要将其加载到windbg中,以便分析占用所有cpu周期的内容。覆盖windbg非常重要,但简要介绍一下你需要做什么:

  • 加载SOS dll(托管调试扩展)
  • 调用!runaway命令获取长时间运行的线程列表
  • 通过选择并调用!clrstack命令
  • 进入长时间运行的线程

有很多关于使用windbg的博客。这是one示例。分析这些类型问题的一个很好的资源是Tess Ferrandez的blog

perfmon + procdump + windbg

Perfmon可以帮助您查看问题是否与导致垃圾回收的高内存分配率有关。您可以查看CPU的w3wp以及进程的分配率和发生的Gen 2集合的数量。 Gen 2集合意味着Gen 1和0也被收集,这意味着它可能是一项昂贵的操作。计数器看:

  • # Gen 2 Collections
  • % Time in GC
  • Allocated Bytes/second

如果你看到一些非常高的分配率,你仍然需要一个内存转储(procdump)和windbg来分析根本原因是什么。 再一次 - Tess Ferrandez在这种高cpu风格上发表了blog帖子。在这篇文章中,问题是将大对象分配到堆上。

perfmon + appcmd

我自己没有尝试过,但理论上它应该有效,并且比其他选项更简单 - 尽管不会产生相同水平的细节。您可以在cpu上为w3wp.exe配置perfmon alerts。可以将警报配置为运行任务。您可以创建一个运行appcmd IIS工具的批处理文件,并告诉它转储所有正在运行的请求:

appcmd list requests > c:\temp\high-cpu-requests.txt

这样,当cpu很高时,你会得到一个长时间运行的请求列表,并希望能够从那里找出有问题的页面。

答案 1 :(得分:0)

IIS Advanced Logging可以帮到你。

虽然它不会为每个请求提供CPU利用率,但它通常可以记录CPU利用率。您可以做的是尝试将这些峰值与之前的请求相匹配。