将特定进程的磁盘 I/O 记录到文件的工具

将特定进程的磁盘 I/O 记录到文件的工具

我使用的是 Windows 8 x64。MSSE(已重命名为 Windows Defender)在快速扫描期间不断导致 BSoD(问题描述在这里)。我想找出它访问的最后一个文件是哪一个。

通常我使用 SysInternals Process Monitor 来执行此类任务。但是,它没有在事件生成时保存事件的选项,而且由于系统因 BSoD 而崩溃,我看不到任何输出。

您是否知道像 SysInternals Process Monitor 这样的用于监控磁盘 I/O 的工具,它会将所有数据保存到 HDD(当然会过滤掉自己的磁盘 I/O)?

答案1

  1. 启用完整崩溃转储。按Win+ Pause,转到“高级系统设置” → 高级选项卡,然后在“启动和恢复”下单击设置。

  2. 确保您的页面文件足够大以容纳完整的转储,即至少为 RAM 大小 + 256 MB。

    • 进入“高级系统设置”→“高级”选项卡

    • 在“性能”下,单击“设置”,然后转到“高级”选项卡

    • 单击“更改...”并选择“自定义尺寸”

    • 不要忘记在确定之前单击“设置”,只单击“确定”是行不通的

    如果此后系统驱动器上的可用空间少于(25 GB + RAM 大小),请执行以下操作:

    • 打开 Regedit

    • 导航HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

    • 创建一个 DWORD 键AlwaysKeepMemoryDump,其值为 1

    • 重启

  3. 启动 Xperf 跟踪(xperf –on DiagEasy从管理控制台),捕获 HDD 活动。

  4. 运行 MSE(或 Windows Defender)并等待崩溃。

  5. 重新启动 Windows 并使用 WinDbg 打开 Memory.dmp 文件。在 Windbg 中运行以下命令查看所有活动的 ETW 日志记录:

    !wmitrace.strdump
    
  6. 查看哪个数字是“NT Kernel Logger”。现在运行以下命令将数据导出到 ETL 文件中:

    !wmitrace.logsave 0xNUMBER c:\DISK.etl
    
  7. 在 xperfview/WPA 中打开 ETL 文件并查看访问了哪些文件的磁盘 IO 图。

答案2

Process Monitor 可以将日志文件写入磁盘,请参阅文件 → 支持文件

相关内容