ProcDump 学习笔记(6.9):MiniPlus 转储(-mp)——轻量却够用的现场证据
ProcDump 学习笔记(6.9):MiniPlus 转储(-mp)——轻量却够用的现场证据
- ProcDump 学习笔记(6.9):MiniPlus 转储(-mp)——轻量却够用的现场证据
- 1)什么是 MiniPlus(`-mp`)?
- 2)MiniPlus vs Full(复习要点)
- 3)何时优先用 MiniPlus?
- 4)上手即用:命令模板
- 4.1 按异常触发(未处理 / 首机会)
- 4.2 假死 / 无响应(Hang)
- 4.3 高 CPU(阈值 + 持续秒数)
- 4.4 等待进程启动再附加
- 5)分析建议(WinDbg / VS / dotnet-dump)
- 5.1 原生进程(WinDbg)
- 5.2 .NET 进程(WinDbg + SOS / dotnet-dump)
- 5.3 Visual Studio
- 6)常见组合策略(从 MiniPlus 到 Full 的“升阶”)
- 7)避坑清单
- 8)即抄即用:三套标准脚本
- 9)小结
ProcDump 学习笔记(6.9):MiniPlus 转储(-mp)——轻量却够用的现场证据
承接 6.8 的“转储文件选型”。本篇聚焦 MiniPlus 转储(
-mp):它在“信息量”和“文件体积”之间的最佳平衡,是首轮排障最推荐的落点。
1)什么是 MiniPlus(-mp)?
-
MiniPlus 是 ProcDump 生成的一类 增强型迷你转储:
- 保留 线程/调用栈/寄存器、模块列表、句柄、加载/卸载模块记录、基本内存映射/统计信息 等;
- 不包含 进程的全部虚拟地址空间(与
-maFull Dump 相比大幅减小体积)。
-
定位目标:先快速定性(谁卡住了、卡在哪层、涉及哪些模块/句柄/同步对象),为是否进一步抓 Full Dump 提供依据。
一句话:足以看清“发生了什么”和“卡在何处”,又不至于把磁盘打爆。
2)MiniPlus vs Full(复习要点)
| 维度 | MiniPlus(-mp) | Full(-ma) |
|---|---|---|
| 典型体积 | 小(十几~数十 MB 量级,依目标而异) | 大(数百 MB~数 GB) |
| 适合问题 | 卡死/高 CPU/死锁/异常初筛 | 托管/原生 堆问题、内存破坏、OOM 深挖 |
| 打开速度 | 快 | 慢 |
| 建议定位顺序 | 第一阶段 | 第二阶段(必要时升级) |
3)何时优先用 MiniPlus?
- “假死/无响应(Hang)”:需要快速拿到所有线程栈,识别死锁/等待链。
- “高 CPU 连续一段时间”:看是哪条线程/哪个函数热点。
- 异常频发但体积受限:先用 MiniPlus 广撒网收线索,再对特定条件抓 Full。
- 持续巡检/长期驻留:降低存储与传输成本。
4)上手即用:命令模板
4.1 按异常触发(未处理 / 首机会)
:: 未处理异常时抓 1 份增强迷你转储
procdump -e -n 1 -mp <PID> "D:\Dumps\Unhandled":: 首机会异常 + 关键词过滤(抓 1 份)
procdump -e 1 -f "NullReferenceException|AccessViolation" -n 1 -mp <PID> "D:\Dumps\FirstChance"
4.2 假死 / 无响应(Hang)
:: 发现窗口无响应即抓 1 份 MiniPlus
procdump -h -n 1 -mp <进程名> "D:\Dumps\Hang"
4.3 高 CPU(阈值 + 持续秒数)
:: CPU 连续 15 秒 > 85% 才触发,避免误报
procdump -c 85 -s 15 -n 1 -mp <PID> "D:\Dumps\HighCPU"
4.4 等待进程启动再附加
:: 目标进程启动后再附加监听(仅抓 1 份)
procdump -w MyApp.exe -n 1 -mp "D:\Dumps\OnStart"
小技巧:永远带上
-n(份数限制),并把输出目录指向数据盘且按应用/场景分目录:
D:\Dumps\{AppName}\{Scenario}便于隔离与轮换清理。
5)分析建议(WinDbg / VS / dotnet-dump)
MiniPlus 的目标是快速定性,所以分析的切入点也以“调用栈与等待关系”为核心。
5.1 原生进程(WinDbg)
!analyze -v:快速总览异常/挂起信息~* k:遍历全部线程栈,找热点/阻塞点!locked、!critsec或!locks(视扩展/符号):查看临界区/锁占用!handle -a:句柄分布,辅助定位句柄泄漏或对象占用
5.2 .NET 进程(WinDbg + SOS / dotnet-dump)
!clrstack/!pe/!threadpool:线程/托管栈/线程池状态!syncblk:托管锁等待(死锁/长等待)dotnet-dump analyze→threads/clrstack:简化托管场景
注意:MiniPlus 不含完整托管堆,针对 GC/OOM/大对象 的深挖需切 Full(见 6.8)。
5.3 Visual Studio
- 直接打开
.dmp,看“诊断摘要 / 线程栈 / 模块 / 异常”即可完成 80% 初筛。
6)常见组合策略(从 MiniPlus 到 Full 的“升阶”)
-
第一轮:
-mp+ 触发条件(异常/高 CPU/假死)+-n 1- 快速看线程栈、模块、句柄、等待链,收敛原因。
-
第二轮(必要时):
- 针对已锁定问题(如 OOM/堆损坏/复杂缓存损坏)改抓
-ma,只抓一次,避免爆盘。
- 针对已锁定问题(如 OOM/堆损坏/复杂缓存损坏)改抓
-
管控:
- 始终控制份数与目录容量,必要时配合计划任务做 历史清理。
7)避坑清单
- 位宽匹配:64 位进程优先用
procdump64.exe;32 位进程用procdump.exe。 - 符号配置:分析时别忘了正确的符号服务器(如
srv*D:\Symbols*https://msdl.microsoft.com/download/symbols)。 - 隐私合规:MiniPlus 通常不含整个地址空间,但仍可能包含敏感数据片段——限制访问、加密传输、按需保留。
- 触发去噪:用
-c/-s(CPU 连续 N 秒)或异常过滤-f降低误触发。
8)即抄即用:三套标准脚本
:: (A)未处理异常——首轮排障
procdump -e -n 1 -mp <PID> "D:\Dumps\Unhandled":: (B)高 CPU 连续 10 秒
procdump -c 90 -s 10 -n 1 -mp <进程名> "D:\Dumps\HighCPU":: (C)窗口无响应(Hang)
procdump -h -n 1 -mp <PID> "D:\Dumps\Hang"
9)小结
- MiniPlus(-mp)= 首轮排障的首选:体积小、信息够、见效快。
- 先
-mp定性,再-ma定点深挖(必要时)。 - 搭配 精准触发(异常/CPU/假死)与 份数限制(
-n),把控稳定性与磁盘成本。
下一篇(6.10)我们将实战 ProcDump × Procmon 的联动:让 Procmon 帮你“圈住关键时刻/关键进程/关键操作”,再由 ProcDump 精准落点抓转储,形成可复现可回溯的闭环定位流程。
