我正在跟踪最近对 Windows 2008 SP2 服务器进行的构建的 CPU 使用情况。以下是任务管理器屏幕截图...
看到它是如何飙升的吗?我希望找出导致这种情况的原因。在做任何事情之前,我猜我需要一个内存转储。目前该进程大约在 450MB 左右。
有谁知道当内存峰值超过 50% 时我该如何获取内存转储。峰值 -> 快照。不是多次快照,只有一次。我知道如何手动获取转储 .. 但那太难了。我需要触发后一次转储,比如说 CPU > 50%。
然后我必须弄清楚如何调试它。
有什么建议么?
答案1
设置性能警报并在操作页面上,让其运行程序或批处理脚本来生成转储。
SysInternals VMMap具有用于脚本的命令行选项,并可能为您提供所需的信息。
vmmap.exe -p w3wp.exe C:\memory.txt
GUI 也非常有用。
答案2
您可以使用 Windows 调试工具获取内存转储。
adplus.vbs 脚本可以从命令行执行此操作,因此可以将其添加为可靠性和性能监视器中数据收集集中的警报任务。
挑战在于长期识别该过程,w3wp.exe 过程通常按计划回收,因此您需要重新创建数据收集和警报。
附加信息:SysInternals 刚刚发布了一款新的命令行工具:ProcDump,用于创建进程转储,并内置支持挂起(无响应)窗口和超过某个阈值的 CPU。请参阅这里。
答案3
调试诊断IIS 的程序可以编程为在应用程序挂起时(违反某些规则)进行转储。如果没有 CPU 使用率的程序(抱歉,我记不清了),DebugDiag 博客有一个 VB 脚本可以附加到 Perfmon 并让您在满足某些条件时触发转储 - 在这种情况下,您的 CPU 使用率可能会触发完整的 w3wp 内存转储。
白皮书中包含了您想要了解的一切“如何使用调试诊断工具 v1.1 (DebugDiag) 调试用户模式进程”。
更新:调试诊断 v2现在可用。
答案4
调试:
可以在 VS2005 和 VS2008 中对转储进行本机调试,只需确保已设置符号以使用 MS 的符号服务器。
可以使用 SOS 扩展在 VS2010(测试版)或 WinDbg 中完成托管(ASP.NET)调试。
请参阅以下博客了解更多详细信息:
有关该主题的书籍已有很多,篇幅过长,本文甚至无法展开。