ProcDump v11.0

作者:Mark Russinovich 和 Andrew Richards

发布时间:2022 年 3 月 11 日

下载 下载 ProcDump (714 KB)

下载 ProcDump for Linux (GitHub)
下载 ProcDump for Mac (GitHub)

使用 ZoomIt 创建

简介

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

使用 ProcDump

捕获使用情况:

procdump.exe [-mm] [-ma] [-mt] [-mp] [-mc <Mask>] [-md <Callback_DLL>] [-mk]
            [-n <Count>]
            [-s <Seconds>]
            [-c|-cl <CPU_Usage> [-u]]
            [-m|-ml <Commit_Usage>]
            [-p|-pl <Counter> <Threshold>]
            [-h]
            [-e [1] [-g] [-b] [-ld] [-ud] [-ct] [-et]]
            [-l]
            [-t]
            [-f  <Include_Filter>, ...]
            [-fx <Exclude_Filter>, ...]
            [-dc <Comment>]
            [-o]
            [-r [1..5] [-a]]
            [-at <Timeout>]
            [-wer]
            [-64]
            {
                {{[-w] <Process_Name> | <Service_Name> | <PID>} [<Dump_File> | <Dump_Folder>]}
            |
                {-x <Dump_Folder> <Image_File> [Argument, ...]}
            }

安装使用情况:

procdump.exe -i [Dump_Folder]
            [-mm] [-ma] [-mt] [-mp] [-mc <Mask>] [-md <Callback_DLL>] [-mk]
            [-r]
            [-at <Timeout>]
            [-k]
            [-wer]

卸载使用情况:

procdump.exe -u

转储类型:

转储类型 说明
-mm 写入“小型”转储文件。 (默认值)
- 包括直接和间接引用的内存(堆栈及其引用的内容)。
- 包括所有元数据(进程、线程、模块、句柄、地址空间等)。
-ma 写入“完整”转储文件。
- 包括所有内存(映像、映射和专用内存)。
- 包括所有元数据(进程、线程、模块、句柄、地址空间等)。
-mt 写入“分类”转储文件。
- 包括直接引用的内存(堆栈)。
- 包括有限的元数据(进程、线程、模块和句柄)。
- 尝试删除敏感信息,但不能保证删除。
-mp 写入“小型增强”转储文件。
- 包括所有专用内存和所有读/写映像或映射内存。
- 包括所有元数据(进程、线程、模块、句柄、地址空间等)。
- 为了使大小最小化,将排除超过 512MB 的最大专用内存区域。
  内存区域定义为相同大小的内存分配的总和。
  转储与完整转储一样详细,但大小只有完整转储的 10%-75%。
- 注意:由于调试限制,CLR 进程将转储为完整转储 (-ma)。
-mc 写入“自定义”转储文件。
- 包括由指定的 MINIDUMP_TYPE 掩码(十六进制)定义的内存和元数据。
-md 写入“回调”转储文件。
- 包括由指定 DLL 的名为 MiniDumpWriteDumpMiniDumpCallbackRoutine 回调例程定义的内存。
- 包括所有元数据(进程、线程、模块、句柄、地址空间等)。
-mk 同样写入“内核”转储文件。
- 包括进程中线程的内核堆栈。
- 使用克隆 (-r) 时,OS 不支持内核转储 (-mk)。
- 使用多个转储大小时,将针对每个转储大小进行内核转储。

条件:

条件 说明
-a 避免中断。 需要 -r。 如果触发器会导致目标由于超出并发转储限制而长时间挂起,则将跳过该触发器。
-at 避免超时时中断。 在 N 秒取消触发器的收集。
-b 将调试断点视为异常(否则忽略它们)。
-c CPU 阈值,高于该阈值则创建进程转储。
-cl CPU 阈值,低于该阈值则创建进程转储。
-dc 将指定的字符串添加到生成的转储注释。
-e 当进程遇到未经处理的异常时写入转储。
包含 1 以在第一次出现异常时创建转储。
添加 -ld 以在加载 DLL(模块)时创建转储(应用筛选)。
添加 -ud 以在卸载 DLL(模块)时创建转储(应用筛选)。
添加 -ct 以在创建线程时创建转储。
添加 -et 以在线程退出时创建转储。
-f 筛选(包括)DLL 加载/卸载时的异常内容、调试日志记录和文件名。 支持通配符 (*)。
-fx 筛选(排除)DLL 加载/卸载时的异常内容、调试日志记录和文件名。 支持通配符 (*)。
-g 在托管进程中作为本机调试程序运行(无互操作)。
-h 如果进程有一个挂起的窗口(至少 5 秒不响应窗口消息),则写入转储。
-k 克隆 (-r) 后或在转储收集结束时终止进程。
-l 显示进程的调试日志记录。
-m 创建转储的内存提交阈值(以 MB 为单位)。
-ml 当内存提交低于指定的 MB 值时触发。
-n 退出前要写入的转储数。
-o 覆盖现有转储文件。
-p 当性能计数器达到或超过指定阈值时触发。 某些计数器和/或实例名称可能区分大小写。
-pl 当性能计数器低于指定阈值时触发。
-r 使用克隆进行转储。 并发限制是可选的(默认值 1,最大值 5)。 使用克隆 (-r) 时,OS 不支持内核转储 (-mk)。 警告:高并发值可能会影响系统性能。
- Windows 7:使用反射。 OS 不支持 -e
- Windows 8.0:使用反射。 OS 不支持 -e
- Windows 8.1 及更高版本:使用 PSS。 支持所有触发器类型。
-s 写入转储前的连续秒数(默认值为 10)。
-t 进程终止时写入转储。
-u 处理相对于单核的 CPU 使用率(与 -c 配合使用)。
-v DEBUG ONLY:详细输出。
-w 如果指定的进程未运行,请等待启动。
-wer 将(最大的)转储排队到 Windows 错误报告。
-x 使用可选参数启动指定的映像。 如果它是商店应用程序或包,ProcDump 将(仅)在下次激活时启动。
-y HIDDEN:商店应用程序激活。
-64 默认情况下,在 64 位 Windows 上运行时,ProcDump 将捕获 32 位进程的 32 位转储。 此选项会替代以创建 64 位转储。 仅用于 WOW64 子系统调试。

许可协议:

使用 -accepteula 命令行选项自动接受 Sysinternals 许可协议。

自动终止:

-cancel <Target Process PID>

使用此选项或设置名称为 ProcDump-<PID> 的事件与键入 Ctrl+C 正常终止 ProcDump 相同。 正常终止可确保在捕获处于活动状态时恢复进程。 取消适用于监视进程的所有 ProcDump 实例。

文件名:

默认转储文件名:PROCESSNAME_YYMMDD_HHMMSS.dmp

支持以下替换:

替换 说明
PROCESSNAME 进程名
PID 进程 ID
EXCEPTIONCODE 异常代码
YYMMDD 年/月/日
HHMMSS 小时/分钟/秒

示例

  • 写入名为“notepad”的进程的小型转储(只能存在一个匹配项):

    C:\>procdump notepad
    
  • 写入 PID 为“4572”的进程的完整转储:

    C:\>procdump -ma 4572
    
  • 首先写入小型转储,然后使用 PID“4572”写入进程的完整转储:

    C:\>procdump -mm -ma 4572
    
  • 在名为“notepad”的进程中每隔 5 秒写入 3 个小型转储:

    C:\>procdump -n 3 -s 5 notepad
    
  • 当名为“consume”的进程超过 20% CPU 使用率 5 秒时,最多写入 3 个小型转储:

    C:\>procdump -n 3 -s 5 -c 20 consume
    
  • 当其中一个窗口未响应超过 5 秒时,写入名为“hang.exe”的进程的小型转储:

    C:\>procdump -h hang.exe
    
  • 当其中一个窗口未响应超过 5 秒时,写入名为“hang.exe”的进程的完整或内核转储:

    C:\>procdump -ma -mk -h hang.exe
    
  • 当系统总 CPU 使用率超过 20% 持续 10 秒时,写入名为“outlook”的进程的小型转储:

    C:\>procdump outlook -s 10 -p "\Processor(_Total)\% Processor Time" 20
    
  • 当 Outlook 的句柄计数超过 10,000 时,写入名为“outlook”的进程的完整转储:

    C:\>procdump -ma outlook -p "\Process(Outlook)\Handle Count" 10000
    
  • 当句柄计数超过 10,000 时,写入“svchost”PID 1234、实例 #87 的完整转储:

    C:\>procdump -ma 1234 -p "\Process(svchost#87)\Handle Count" 10000
    

    注意:多实例计数器
    如果计数器有多个实例,则需要包含名称和/或实例编号。

    \Processor(NNN)\% Processor Time
    \Thermal Zone Information(<name>)\Temperature
    \Process(<name>[#NNN])\<counter>
    

    旧版 OS 要求附加 \Process 计数器的 PID。

    \Process(<name>[_PID])\<counter>
    

    提示:使用性能监视器查看计数器(尤其是区分大小写)。
    提示:对于基于 \Process(*) 的计数器,使用 PowerShell 将 PID 映射到其 #NNN

    Get-Counter -Counter "\Process(*)\ID Process"
    
  • 为第 2 次异常写入完整转储:

    C:\>procdump -ma -e w3wp.exe
    
  • 为第 1 次和第 2 次异常写入完整转储:

    C:\>procdump -ma -e 1 w3wp.exe
    
  • 为调试字符串消息写入完整转储:

    C:\>procdump -ma -l w3wp.exe
    
  • 为 w3wp.exe 的每个第 1 次或第 2 次异常写入最多 10 个完整转储:

    C:\>procdump -ma -n 10 -e 1 w3wp.exe
    
  • 如果异常的代码/名称/消息包含“NotFound”,则最多写入 10 个完整转储:

    C:\>procdump -ma -n 10 -e 1 -f NotFound w3wp.exe
    
  • 如果调试字符串消息包含“NotFound”,则最多写入 10 个完整转储:

    C:\>procdump -ma -n 10 -l -f NotFound w3wp.exe
    
  • 等待名为“记事本”的进程(并监视其是否有异常):

    C:\>procdump -e -w notepad
    
  • 启动名为“记事本”的进程(并监视其是否有异常):

    C:\>procdump -e -x c:\dumps notepad
    
  • 注册以启动并尝试激活商店“应用程序”。 激活后,新的 ProcDump 实例将启动:

    C:\>procdump -e -x c:\dumps Microsoft.BingMaps_8wekyb3d8bbwe!AppexMaps
    
  • 注册以启动应用商店“包”。 激活后,新的 ProcDump 实例将(手动)启动:

    C:\>procdump -e -x c:\dumps Microsoft.BingMaps_1.2.0.136_x64__8wekyb3d8bbwe
    
  • 当 Microsoft Exchange 信息存储具有未经处理的异常时,将写入小型增强转储:

    C:\>procdump -mp -e store.exe
    
  • 无需写入转储即可显示 w3wp.exe 的异常代码/名称:

    C:\>procdump -e 1 -f "" w3wp.exe
    
  • Windows 7/8.0;使用反射可减少 5 个连续触发器的中断:

    C:\>procdump -r -ma -n 5 -s 15 wmplayer.exe
    
  • Windows 8.1+;使用 PSS 减少 5 个并发触发器的中断:

    C:\>procdump -r 5 -ma -n 5 -s 15 wmplayer.exe
    
  • 将 ProcDump 作为 (AeDebug) 事后调试器安装:

    C:\>procdump -ma -i c:\dumps
    

    ..或..

    C:\Dumps>procdump -ma -i
    
  • 将 ProcDump 作为 (AeDebug) 事后调试器卸载:

    C:\>procdump -u
    

请参阅示例命令行列表(示例在上面列出):

C:\>procdump -? -e
  • Windows Internals 书籍:关于 Windows Internals 的权威性书籍的官方更新和勘误页,由 Mark Russinovich 和 David Solomon 编写。
  • Windows Sysinternals 管理员参考:Mark Russinovich 和 Aaron Margosis 编写的 Sysinternals 实用工具官方指南,其中包含各项工具的说明、其功能、如何使用这些工具进行故障排除,以及它们的实际使用示例。

下载 下载 ProcDump (714 KB)

下载 ProcDump for Linux (GitHub)
下载 ProcDump for Mac (GitHub)

运行平台:

  • 客户端:Windows 8.1 及更高版本。
  • 服务器:Windows Server 2012 及更高版本。

了解更多