工具介绍
ProcDump是System Internal提供的一个专门用来监测程序CPU高使用率从而生成进程dump文件的工具。ProcDump可以根据系统的CPU使用率或者指定的性能计数器来针对特定进程生成一系列的dump文件,以便调试者对事故原因进行分析。
下载地址
http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx
使用方法
命令行
procdump [-64] [[-c CPU usage] [-u] [-s seconds]] [-n exceeds] [-e [1 [-b] [-f filter] [-g]]] [-h] [-l] [-m commit usage] [-ma | -mp] [-o] [-p counter threshold] [-r] [-t] [-d <callback DLL>] <[-w] <process name or PID> [dump file] | -i <dump file> |-x <dump file> <image file> [arguments]> [-? [ -e]]
实例
procdump -c 70 -s 5 -ma -n 3 w3wp
当系统CPU使用率持续5秒超过70%时,连续抓3个full dump。
Procdump outlook -p "\Processor(_Total)\% Processor Time" 80
当系统CPU使用率超过80%,抓取outlook进程的mini dump。
procdump -ma outlook -p "\Process(Outlook)\Handle Count" 10000
当outlook进程handle数超过10000时抓取full dump
procdump -ma 4572
直接生成进程号位4572的full dump。
运行效果
以下是通过一个测试页面在w3wp进程中造成high cpu时运行ProcDump命令的效果。可以看到在系统CPU每次持续5秒达到70%后就会生成相应的dump文件。
注意
- Procdump需要进程已经启动,并且中途不能停止。比如需要抓取IIS Worker Process的High CPU Dump,由于IIS Worker Process默认会配置Idle Timeout = 20 min,即该进程在20分钟内没有任何请求的话就会自动结束,这种情况下ProcDump也会自动结束。需要重新运行命令。因此如果目标程序存在这样的配置,需要暂时将该配置取消。
- 有些系统管理员希望能够运行该工具后退出用户session,ProcDump是做不到的,如果有这种需求可以考虑使用debugdiag。
- 在调试High CPU问题的时候经常用到的一个命令是!runaway,但是有些时候!runway在ProcDump抓取的dump中提取不出来。解决的方法是将Debug Tools for Windows (windbg)安装目录下的dbghelp.dll拷贝到procdump目录下,然后再运行命令抓取dump。
0:000> !runaway ERROR: !runaway: extension exception 0x80004002. "Unable to get thread times - dumps may not have time information"