【Procdump神技能】轻松设置进程转储规则,解锁故障排查新姿势!

【Procdump神技能】轻松设置进程转储规则,解锁故障排查新姿势!ProcDump 是一个命令行实用工具 其主要用途是监视应用程序的 CPU 峰值 并在出现峰值期间生成故障转储 管理员或开发人员可以使用这些转储来确定出现峰值的原因

大家好,欢迎来到IT知识分享网。

1. 概要:

        ProcDump是一个命令行实用工具,其主要用途是监视应用程序的CPU峰值,并在出现峰值期间生成故障转储,管理员或开发人员可以使用这些转储来确定出现峰值的原因。 ProcDump还支持挂起窗口监视(使用与Windows和任务管理器使用的窗口挂起相同的定义)、未处理的异常监视,并且可以根据系统性能计数器的值生成转储。它还可用作可嵌入到其他脚本中的常规进程转储实用工具。

可以通过以下链接下载ProcDump工具

ProcDump – Sysinternals | Microsoft Learn

本文介绍了使用Procdump指定转储文件的相关规则与方法。

2. 详细信息:

若要定期创建一系列转储,可配合使用-s和-n选项,也无需指定任何转储条件。

  • -s指定了上一次捕获结束后和下一次捕获开始前的秒数。如果忽略-s选项,默认时间周期将为10秒。
  • -n指定了进程退出前要捕获的转储数量。捕获多个范本可以防止第一个转储是某些顺变条件导致,而非试图追踪的原因导致的。

例如,下列命令可立刻为Testapp进程捕获转储,并在5秒后再次创建,再过5秒再次创建,共创建3个转储文件:

Procdump -s 5 -n 3 testapp

监视CPU用量

-c CPU用量超过指定阈值并持续指定长度的时间后自动创建转储文件。

-cl CPU用量低于指定阈值并持续同样长度的时间后自动创建转储文件。

例如,testapp使用CPU用量持续超过90%,5秒,procdump创建转储文件并退出:

Procdump -c 90 -s 5 testapp

如下命令在testapp进程CPU占用超过80%并维持3秒后创建一个转储文件,直到总共创建3个转储。

Procdump -c 80 -s 3 -n 3 testapp

在多内核系统中,单一线程无法消耗所有处理器的全部时间。双核系统中,单一线程最多消耗50%的处理时间;四核系统中,最多消耗25%,以此类推。为了在多个内核的CPU系统中针对-c和-cl阈值进行等比放大,可在命令行中使用-u(单处理选项)。例如:

Procdump -c 90 -u testapp

可在testapp的CPU用量超过45%且维持10秒的情况下创建转储,双内核45%的用量相当于单内核90%的用量。而16核系统中,触发器法制将被调整为5.6525%。

提示:-c和-cl需要使用整数值,而-u选项可以为多核系统指定更为精准的阈值。

注意:CPU密集型用户模式线程通常会设计为通过多个CPU运行,除非处理器相关性被设置为仅允许使用一个CPU。-u选项并不能实现“如果进程超过单一CPU阈值后创建转储”类似的效果。

监视内存用量

  • -m 超出指定阈值时创建转储
  • -ml 低于指定阈值时创建转储

所指定的内存阈值以MB为单位统计。Procdump每秒一次检查该进程的内存计数器,但只能在检查的一刻发现进程的内存用量相对于系统提交限制(页面文件总量+大部分RAM)超出或低于阈值时才能创建转储。如果用量的尖峰或低谷只持续很短暂的时间,Procdump可能无法检测到。

例如,下面命令可以在testapp内存用量超过200MB后创建一个转储,并且在内存用量低于200MB之前,每隔五秒创建一个转储,直到10个。

Procdump -m 200 -n 10 -s 5 testapp

使用性能计数器触发转储

-p 后跟计数器名称及条件超出的阈值。

-pl 后跟计数器名称及条件低于的阈值。

注意:如果计数器名称中包含空格,需要将名称放在引号内。

机制与内存用量监视相同,每秒检测一次,可配合-n和-s选项定期创建更多转储文件。例如下列命令,可以检测系统进程数量超过750个之后,为taskmgr.exe创建转储,随后如果进程数量依然多于750,会每秒一次额外创建2个转储(共3个)。

Procdump -p “\System\Processes” 750 -s 1 -n 3 taskmgr.exe

  • -e 在进程遇到unhandle exception之后创建转储。
  • -e 1 在每次异常后创建转储,包括第一轮异常。
  • -h 监视目标进程挂起(停止响应)的顶层窗口,之后创建转储。不响应定义:如果某个被监测的窗口无法响应窗口消息五秒,则会认为窗口不响应。
  • -n 创建多个转储。除非-s指定不同的间隔,否则首次创建转储后,每间隔10秒创建一个转储
  • -l 监视目标仅此创建的调试输出。如果不使用-f筛选选项,Procdump会在每次创建调试输出后创建一个转储。借助筛选,可以指定哪些输出触发转储,哪些仅汇报给Procdump控制台输出。
  • -t 可在进程终止时创建转储。用于找出非由unhandled-exception导致的进程非预期退出。
  • -f 指定哪些异常或调试输出可触发转储,或仅输出值Procdump控制台输出。如果只希望查看所有调试输出和第一轮异常但不创建转储,可使用-f “”,或其他绝对不会出现在输出结果中的任何文本,例如-f “THISWILLNEVERHAPPEN”

3. 示例与演示:

范例1:Procdump附加至Word实例并回报遇到的第一轮异常信息,但不会创建转储文件

Procdump.exe -e 1 -f “” winword.exe C:\temp

范例2:随后10次遇到该第一轮异常后,每次创建完整转储并存储至C:\Temp目录,该异常代码为C0000005,代表“访问冲突”

Procdump.exe -ma -n 10 -e 1 -f c0000005 winword.exe C:\Temp

范例3:多选项配合使用。下列命令会在Testapp应用超过CPU阈值或内存用量阈值且维持3秒后,窗口不响应,或遇到unhandled-exception的异常后创建转储,其他情况则会自动退出。

Procedump.exe -m 200 -c 90 -u -s 3 -h -t -e testapp

演示:利用性能监视器配合procdump监视进程内存使用。

1)运行perfmon,性能监视器添加memory – committed bytes计数器。

【Procdump神技能】轻松设置进程转储规则,解锁故障排查新姿势!

2)右键点击刚刚添加的计数器 – 属性,查看计数器的名称。

【Procdump神技能】轻松设置进程转储规则,解锁故障排查新姿势!

3)找到想要监控进程的PID,并运行如下命令监控对应的进程,如果超出限额后自动创建转储:

Procdump -p “\Memory\Committed Bytes” 892

【Procdump神技能】轻松设置进程转储规则,解锁故障排查新姿势!

4. 参考资料:

    《Windows Internals实战指南》

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/117200.html

(0)
上一篇 2025-11-22 22:10
下一篇 2025-11-22 22:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信