Process Monitor 是一款 Windows 平台的高级监控工具。它可以记录系统中注册表、文件和进城、线程的活动。功能上集合了 Sysinternals 组件中 FileMon 和 RegMon 的功能并添加了很多方便排查问题的实用功能,如过滤条件并且提供了丰富的事件属性,如 Session IDs 、用户名、进程信息、调用栈等等。这些特性使 Process Monitor成为 Windows 平台中不可或缺的神兵利刃。

Procmon 强大的功能集

  • 强大的条件过滤功能,方便我们快速定位;
  • 捕获每个操作的线程堆栈;
  • 可靠捕获进程详细信息,如映像路劲、命令行、用户、加载的模块和会话 ID等;
  • 进程树可以详细的列举进程的父子关系;
  • PML格式支持保存所有日志信息,以便在不同的 Process Monitor实例中加载;
  • 支持引导启动,方便排查启动过程中的错误;
  • Process Monitor 的缺点

  • 日志缓存在虚拟内存中,长时间抓取时会导致内存不足;一般情况下我们建议每隔一小时启停一次,可以配合脚本或者定时任务来完成;
  • 条件设置的逻辑关系无法自定义;
  • 如何开启Process Monitor数据收集

  • 启动Process Monitor工具.
  • 点击 img 图标清空日志。
  • 点击 img 图标,之后该图标会变为 img 表示此时正在收集数据。
  • 如何保存Process Monitor收集到的数据

  • 点击 img 图标,之后该图标变为 img 表示数据收集工作已经停止。
  • 点击 img 图标保存日志,选择“All events”,格式选择为PML,如下图所示:
  • 如需要排查某应用的问题,则可以先添加 Process Name 条件为某应用的名称;
  • 如需要定位注册表,则可以尝试设置可能的 Path 路径条件 或者可能的关键字;
  • 如需要定位 FileNotFound 的问题,则可以设置 Result 为 FileNotFound;
  • 添加合适条件后尝试使用二分法定位具体位置,可以结合对应的事件属性,如调用栈;
  • 如何抓取系统启动时的事件

    在 Option 中选择 Enable Boot Logging 功能,如下图:

    配置 Symbol 路径,可以在 Process Monitor –> Option –> Configure Symbols 中配置或者设置系统环境变量,可以参考文章 Specify symbol file locations from the command line

    双击事件并选择 Stack 列,则可以看到对应的调用栈,该功能部分场景下只有 public symbol 时意义不大,但如果有 private symbol 则如虎添翼;

  • 本文作者: Robin Chen
  • 本文链接: https://crushonme.github.io/2018/09/10/How-To-Use-Process-Monitor/
  • 版权声明:自由转载-非商用-非衍生-保持署名( 创意共享4.0许可证
  • Document Information

  • Author : Robin Chen
  • Link : https://crushonme.github.io/2018/09/10/How-To-Use-Process-Monitor/
  •