ProcDump是一个可以用于诊断多种问题点的命令行工具。和Dr.Watson、ADPlus以及DebugDiag一样,ProcDump可以在不期望的情况或者异常发生时,用于俘获一个进程的内存转储。而且也同ADPlus以及DebugDiag一样,它可以对一个挂起的应用程序强制进行进程转储。但和之前的任何工具不同的是,ProcDump可以在CPU的活动峰值达到一个指定的级别时,对一个进程进行转储。
这对于那些间歇性的性能问题是特别有用的,对于这种问题,其发生是很难预测的。 ProcDump包括一个单独的可执行文件(procdump.exe),而这个文件可以接受多种不同的参数。当不带任何参数时,……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
ProcDump是一个可以用于诊断多种问题点的命令行工具。和Dr.Watson、ADPlus以及DebugDiag一样,ProcDump可以在不期望的情况或者异常发生时,用于俘获一个进程的内存转储。而且也同ADPlus以及DebugDiag一样,它可以对一个挂起的应用程序强制进行进程转储。但和之前的任何工具不同的是,ProcDump可以在CPU的活动峰值达到一个指定的级别时,对一个进程进行转储。这对于那些间歇性的性能问题是特别有用的,对于这种问题,其发生是很难预测的。
ProcDump包括一个单独的可执行文件(procdump.exe),而这个文件可以接受多种不同的参数。当不带任何参数时,ProcDump工具会在保持应用程序执行的情况下,强制进行一个内存转储。例如,如下的命令会强制对微软Outlook应用程序进行转储,获取其内存的内容,并放到outlook.dmp文件中。
C:> procdump outlook.exe
默认情况下,对进程内存的转储只会获取线程和句柄信息。而当使用参数-ma时,会执行一个完整的进程内存转储。这样就可以让调试器识别到应用程序的更多信息,包括线程环境(!teb)、进程环境(!peb)以及锁信息(!locks –v),就像下图中,winword.exe的调试器输出那样。
图1
通过使用-h参数,ProcDump会检测一个挂起的Windows应用程序,并强制进行内存转储。这与ADPlus和DebugDiag中的功能很相似。使用-e参数可以使得ProcDump去检测应用程序的一个未处理的异常,并获取进程转储。通过接下来对进程转储的分析,您可以弄清哪些程序、DLL以及错误情况在中断时发生了。这可以让您通过在网上进行智能的搜索,找到相似的场景,以便确定是否发生了一个已知的问题点,或者您是否需要和卖方进行联系。
让ProcDump和之前的工具与众不同的是,它可以检测CPU峰值,并在达到时,收集进程转储。对于别人无法干预的间歇性问题,这是非常有用的。有三个参数可以实现这一功能:
-c 在产生一个进程转储前,指定CPU达到的阈值。
-s 指定达到该阈值的持续时间秒数
-u 指定CPU为单核
为了说明其使用方法,让我们来看一个简单的例子。下面的第一个命令会开启一个独立的窗口,并在该窗口执行一个遍历系统磁盘的目录命令。然后,您可以使用tlist命令去快速地找到PID(进程ID)。最后,使用ProcDump命令去指定在PID 1432上(在这个例子中)CPU阈值为10%,持续时间为至少2秒时会产生一个进程转储。
C:> start "dir window" dir /s c:
C:> tlist
[…]
1432 cmd.exe dir window - dir /s c:
C:> procdump -c 10 -s 2 1432
ProcDump v1.4 - Writes process dump files
Copyright (C) 2009 Mark Russinovich
Sysinternals - www.sysinternals.com
Process: cmd.exe (1432)
CPU threshold: 10% of system
Duration threshold: 2s
Number of dumps: 1
Hung window check: Disabled
Exception monitor: Disabled
Dump file: D:KitsProcDumpv1.4cmd.dmp
Time CPU Duration
[12:09.18] 15% 1s
[12:09.19] 10% 2s
Process has hit spike threshold.
Writing dump file D:KitsProcDumpv1.4cmd_091709_120919PM.dmp...
Dump written.
当然,这是有关其使用的一个不切实际的例子。因为实际上,应该指定一个更长时间,以及一个更高的CPU阈值,以便防止间歇性的CPU峰值。但这是一个简单的示例,以展示这些参数是怎样一起被使用的,比便触发一个进程转储。
一旦进程转储已经被写入,您就可以使用Windbg去分析其内容。可以从下图中看到,调试器标注,一个进程占用了超过10%的CPU时间,并持续了2秒,并显示了其线程ID(0xc2c)。线程ID是很重要的,因为一个进程可能有多个线程。所以你应该集中到造成CPU峰值的线程的堆栈模式。
图2
最后,通过对调试器发出~*kv命令,会显示所有线程的堆栈模式,并同时提供被执行的函数的名字。在下面的例子中,您可以看到,目录命令是怎样去执行多种功能,像cmd!FileIsConsole、 cmd!WriteEol、cmd!NewDisplayFile 以及 cmd!WalkTree。尽管这些功能名对我们来说没有什么意义,但我们可以用它们作为关键词,在网络上去搜索针对我们失控进程的可能解决方案。
图3
就像您所看到的,有很多免费的工具可以被用作对应用程序崩溃和挂起的诊断。我们介绍了Dr. Watson、ADPlus、 DebugDiag 以及 ProcDump都是怎么去获取进程转储。然后,通过使用Windbg,您可以对转储进行分析,并查看崩溃场景中的当前线程,或者被ProcDump所识别的失控线程的堆栈模式。
相关推荐
-
Windows服务器管理员PowerShell入门
Microsoft Windows PowerShell 4.0是脚本语言的最新版本,包含在Windows Server 2012 R2操作系统中,并且向后兼容早期的PowerShell版本。
-
如何控制桌面:用Windows桌面管理员权限换取iPad
有一种简单的方式可以既抑制用户Windows桌面管理员权利,还能让他们完成工作,加一台平板或iPad完成所有私人或非受IT支持的事情。
-
微软三大VDI虚拟桌面认证
决定部署VDI与如何提供有效支持,是组织需要关注的两个不同问题。让员工参加培训并获得认证,是确保工作人员具备部署、管理与支持VDI技能的途径之一。
-
克服多重挑战 成功从Unix迁移到Windows
和Unix正在失去企业市场相对应的是,企业也在为他们的工作负载寻找新的承载平台, 微软Windows是备选目标之一。在处理Unix到Windows的迁移工作时规避许多障碍。