ProcDump v11.0

作者:Mark Russinovich 和 Andrew Richards

发布时间:2022/11/03

下载下载 ProcDump (714 KB)

下载 ProcDump for Linux (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

转储类型:

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

条件:

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

示例

  • 编写名为“记事本”的进程小型转储, () 只能存在一个匹配项:

    C:\>procdump notepad
    
  • 使用 PID“4572”编写进程的完整转储:

    C:\>procdump -ma 4572
    
  • 首先编写 Mini,然后编写 PID 为“4572”的进程的完整转储:

    C:\>procdump -mm -ma 4572
    
  • 在名为“记事本”的进程相隔 5 秒的间隔内写入 3 个小型转储:

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

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

    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 要求追加计数器的 PID \Process

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

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

    Get-Counter -Counter "\Process(*)\ID Process"
    
  • 为第二次机会异常编写完整转储:

    C:\>procdump -ma -e w3wp.exe
    
  • 为第一次或第二次机会异常编写完整转储:

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

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

    C:\>procdump -ma -n 10 -e 1 w3wp.exe
    
  • 如果异常的代码/名称/msg 包含“”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 信息存储出现未经处理的异常时,写入 MiniPlus 转储:

    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 内部书籍 由 Mark Russinovich 和 David Solomon 撰写的关于 Windows 内部的权威书籍的官方更新和勘误表页面。
  • Windows Sysinternals 管理员参考 Mark Russinovich 和 Aaron Margosis 提供的 Sysinternals 实用工具官方指南,包括所有工具的说明、其功能、如何使用这些工具进行故障排除,以及示例实际使用案例。

下载下载 ProcDump (714 KB)

下载 ProcDump for Linux (GitHub)

运行时间:

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

了解更多