Process Monitor 学习笔记(5.7):长时间运行追踪与日志体积控制
Process Monitor 学习笔记(5.7):长时间运行追踪与日志体积控制
- Process Monitor 学习笔记(5.7):长时间运行追踪与日志体积控制
- 一、为什么“长时间抓取”会失控?
- 二、三层控量思路(先过滤 → 再丢弃 → 后落盘)
- 1) 先过滤:只看该看的
- 2) 再丢弃:只保留“通过过滤”的事件
- 3) 后落盘:把内存换成磁盘
- 三、长时间抓取的“稳态配置”清单(拿来即用)
- 四、分段与归档:把“瀑布流”切成“乐高块”
- 五、容量与性能的“七条铁律”
- 六、典型场景配置模板
- 场景 A:偶发卡顿(全天巡检)
- 场景 B:磁盘打爆排查(高 IO)
- 场景 C:注册表异常写入(策略/驱动反复改值)
- 七、分析与复盘的三板斧
- 八、交付物规范(让同事一眼看懂)
- 九、常见坑与止损
- ✅ 小结
Process Monitor 学习笔记(5.7):长时间运行追踪与日志体积控制
目标:让 Procmon 在“跑一整天/跨多小时”也稳、准、省,不把磁盘打爆,还能把关键证据沉淀下来。
一、为什么“长时间抓取”会失控?
Procmon 默认把事件写在内存环形缓冲里,界面显示的是实时刷新的“窗口”。
当事件量巨大(驱动/安全软件/编译/IO 密集场景),内存会顶不住;若直接落盘,又可能把硬盘写满。
解法核心:先“减量”,再“控盘”,最后“分段”。
二、三层控量思路(先过滤 → 再丢弃 → 后落盘)
1) 先过滤:只看该看的
-
Filter(Ctrl+L):
典型白名单/黑名单策略:Process Name is <目标进程/家族>
Path begins with C:\AppRoot\
或Path contains \Temp\
Operation is CreateFile/ReadFile/WriteFile/RegSetValue/Load Image
- 少用 “Anything contains …” 的泛匹配;慎用
Result is SUCCESS
(很多有效线索是失败返回导致的重试/卡顿)
-
Highlight(Ctrl+H):把
ACCESS DENIED / NAME NOT FOUND / PATH NOT FOUND / SHARING VIOLATION
等异常结果高亮,方便长跑后快速扫慢点。
经验:按业务边界过滤(进程名/路径前缀),比按错误码过滤更稳。错误码会“漂移”,但业务边界稳定。
2) 再丢弃:只保留“通过过滤”的事件
-
勾选
Filter → Drop Filtered Events
- 含义:丢掉未命中过滤条件的事件(破坏性过滤)
- 收益:日志体积可下降 10~100 倍
- 前置条件:过滤器必须先调好(建议先短跑验证 3–5 分钟)
3) 后落盘:把内存换成磁盘
File → Backing Files…
指定落盘文件(非系统盘更佳,例如D:\ProcmonLogs\run1.pml
)- 建议:给日志盘预留 >10 GB 可用空间;配合定时分段(见下)
三、长时间抓取的“稳态配置”清单(拿来即用)
-
设置过滤器(按进程/路径/操作裁剪)
-
开启 Drop Filtered Events
-
关闭栈采集/高级输出:
Options → Enable Advanced Output
取消勾选- 说明:栈信息很有价值,但成本极高;长跑建议先关,定位到可疑点后短跑再开栈复现
-
关闭 Profiling 采样(若版本提供
Options → Enable Profiling Events
,取消勾选) -
启用 Backing Files(落盘),路径指向非系统盘
-
最小化运行,按需暂停/继续(工具栏红/绿按钮)
-
每 30–60 分钟分段保存一次(见“分段与归档”)
四、分段与归档:把“瀑布流”切成“乐高块”
思路:长跑不存一个超大文件,而是周期性切段保存,方便回看、分享与比对。
推荐流程(手工版)
-
跑满一个观察周期(如 30 分钟)→
File → Save…
- Format:
Native Process Monitor Format (PML)
- Events to save:
Events displayed using current filter
(只存“有效信号”) - 命名:
HOST-案件简称-YYYYMMDD-HHMM-段号.pml
- Format:
-
Edit → Clear Display
清屏后继续采集下一段(过滤仍生效)
自动化分段
- 先保存一份
.pmc
过滤配置(下篇 5.9 会讲命令行,届时可procmon.exe /LoadConfig cfg.pmc /BackingFile path
+ 计划任务定时/Terminate
与二次/BackingFile
重启采集,实现滚动切片。)
五、容量与性能的“七条铁律”
- 过滤优先:不过滤就落盘 = 纯粹堆垃圾
- 丢弃噪声:
Drop Filtered Events
是长跑第一法宝 - 关栈关采样:长跑先关高级输出/栈/Profiling,命中后再短跑开
- 独立日志盘:避免系统盘告急影响业务
- 定时切段:单段 300–800MB 控制在可接受范围(视场景)
- 必要时 CSV 导出脱敏:便于跨团队分享
- 与杀软互斥白名单:把
procmon.exe
与日志目录加到安全软件排除,避免互相拖慢
六、典型场景配置模板
场景 A:偶发卡顿(全天巡检)
-
过滤:
Process Name is myservice.exe OR myworker.exe
Operation is CreateFile/ReadFile/WriteFile/Reg*
-
开
Drop Filtered Events
,关“高级输出/栈/Profiling” -
Backing File →
E:\pm\巡检\巡检-%DATE%.pml
-
每 1 小时
Save
一段,清屏续跑 -
发现卡顿时间点后,用相同过滤短跑 + 开栈复现
场景 B:磁盘打爆排查(高 IO)
-
过滤:
Path begins with C:\Users\*\AppData
或目标目录Operation is WriteFile/SetEndOfFile/SetDispositionInformationFile
-
高亮:
WriteFile Duration > 10ms
(可用列排序替代) -
观察
Process Name
与Path
组合,锁定“写洪峰”来源
场景 C:注册表异常写入(策略/驱动反复改值)
- 过滤:
RegSetValue/RegCreateKey
+ 目标 hive(如HKLM\SOFTWARE\Vendor
) - 高亮:
ACCESS DENIED / REPARSE / BUFFER OVERFLOW
- 按时间线比对改写频度,抓“谁在偷偷改”
七、分析与复盘的三板斧
-
Duration 排序:先看最慢的 IO/注册表访问
-
Result 归类:集中看
NAME NOT FOUND / PATH NOT FOUND / ACCESS DENIED
-
聚合维度:
- 按
Process Name
分组(右键列头 → 添加/移除列,配合排序) - 按
Path
前缀(目录级)定位“热区”
- 按
命中可疑点后,再开 Call Stack 精准落锤(短跑复现即可)。
八、交付物规范(让同事一眼看懂)
-
PML 切片:
HOST-Case-YYYYMMDD-HHMM-PartN.pml
-
说明文档(Markdown/TXT):
- 现象 & 影响面
- 抓取时间窗口(起止)
- 使用的过滤条件(贴
.pmc
配置) - 关键时间点(如“14:32 卡 90s”)
- 发现 & 初步结论
-
可选:导出一份 CSV(按当前过滤) 供 BI/脚本二次分析
九、常见坑与止损
-
忘开 Drop Filtered Events → 日志爆量:
- 立即暂停 → 调整过滤 → 勾选 Drop → 继续
-
系统盘吃满:
- Backing File 放非系统盘;设置磁盘告警;定时切段
-
UI 卡顿/假死:
- 先
Pause
,再Save
;必要时命令行结束(见 5.9)
- 先
-
抓了一天却没信号:
- 先用高亮 + Duration 排序做“快筛”;
- 没命中就收窄过滤或换观察窗口(进程家族/路径前缀)
✅ 小结
- 长跑 Procmon 的黄金组合:精确过滤 + Drop Filtered Events + 落盘 + 分段保存。
- 先“抓到”,再“抓细”:长跑稳态禁用高成本项,命中后短跑开栈复盘。
- 以交付物规范确保跨团队沟通顺畅,证据可复核、可追溯。