机械硬盘异常时需用资源监视器定位高响应时间进程及文件路径;powershell可导出高i/o进程句柄;性能监视器支持长期跟踪文件级i/o事件。

当机械硬盘持续发出咔哒声、系统明显卡顿或资源监视器显示高响应时间时,说明有文件正被频繁读写;必须穿透进程层定位到具体路径,否则无法判断是临时文件刷盘还是日志无限膨胀。
用资源监视器查正在读写的文件路径
资源监视器是唯一能实时显示“哪个进程→正在操作→哪个具体文件”的原生工具,它不依赖进程名猜测,直接抓取内核句柄级访问行为。
1、按 Win + R 打开运行框,输入 resmon 回车启动资源监视器。
2、切换到“磁盘”选项卡,等待5秒让数据刷新稳定——刚打开时数值跳动剧烈,不代表真实负载。
3、点击列标题“响应时间(ms)”降序排列,优先关注持续高于15 ms的条目;机械硬盘正常响应应在8–12 ms区间,超过15 ms说明该进程正对硬盘施加随机小文件读写压力。
4、勾选响应时间最高的那个进程左侧复选框,底部“关联的句柄”面板立即列出它当前打开的所有文件路径。
5、重点筛查路径中是否含 C:\Windows\Logs\、C:\Users\用户名\AppData\Local\Temp\ 或 D:\Backup\2026-09\ 这类典型高IO目录;若路径指向某个.exe文件自身(如 WeChatAppEx.exe),说明它正在读取自己的资源包,属正常行为,不用处理。
用PowerShell导出高I/O进程及其文件句柄
当资源监视器界面卡顿或需留痕比对时,用PowerShell命令可一次性导出完整列表,结果更稳定、可复制粘贴到记事本逐行分析。
方法一:导出当前所有进程的磁盘读写字节数及前3个文件路径
以管理员身份运行 PowerShell,执行以下命令:
Get-Process | Where-Object { $_.IOReadBytes -gt 1MB -or $_.IOWriteBytes -gt 1MB } | ForEach-Object { $proc = $_; $handles = Get-Process -Id $proc.Id -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Handles -ErrorAction SilentlyContinue | ForEach-Object { try { $path = (Get-Process -Id $proc.Id -ErrorAction SilentlyContinue).Modules.FileName -match '^\w:' | Select-Object -First 1 } catch {} }; [PSCustomObject]@{ProcessName = $proc.ProcessName; IOReadMB = [math]::Round($proc.IOReadBytes / 1MB, 1); IOWriteMB = [math]::Round($proc.IOWriteBytes / 1MB, 1); TopHandlePath = $handles[0] } } | Sort-Object IOReadMB -Descending | Format-Table -AutoSize
执行后会列出读写量超1MB/s的进程,并附带其首个文件句柄路径;注意:IOReadBytes 和 IOWriteBytes 是累计值,不是瞬时速率,所以要连续执行两次,间隔10秒,对比增量才知是否真在活跃读写。
方法二:快速定位某进程打开的所有文件(已知进程名)
比如怀疑 FileSyncHelper.exe 在狂写,直接运行:
Get-Process FileSyncHelper | ForEach-Object { $pid = $_.Id; Get-Process -Id $pid -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Modules | Where-Object { $_.FileName } | Select-Object FileName -First 5 }
通过性能监视器长期记录文件级I/O事件
如果问题只在凌晨3点自动出现,或每3小时规律性爆发,就得用性能监视器设为后台采集,避免人工盯屏漏掉关键窗口。
第一步:创建数据收集器集
1、按 Win + R 输入 perfmon 回车,打开性能监视器。
2、左侧展开“数据收集器集”→右键“用户定义”→“新建”→“手动创建收集器集”。
3、名称填“机械硬盘文件级监控”,勾选“创建数据日志”,点下一步。
4、在“性能计数器”页,点击“添加”→展开“Process”→勾选:% Disk Read Bytes/sec、% Disk Write Bytes/sec、IO Read Operations/sec、IO Write Operations/sec;再展开“LogicalDisk”→勾选目标盘符(如 C:)的Avg. Disk sec/Read和Avg. Disk sec/Write。
第二步:添加事件跟踪(关键)
5、切换到“事件跟踪程序”页→点击“添加”→选择Kernel Trace→勾选Disk I/O和File I/O子项。
6、设置日志保存路径为非系统盘(如 D:\PerfLogs),采样间隔设为1秒,持续时间选“直到手动停止”。
7、点完成→右键刚建的收集器集→“属性”→“日志格式”选二进制(.blg)→“确定”后右键启动。
第三步:事后分析文件路径
8、问题复现后,右键停止收集器集→双击生成的 .blg 文件→在“报告”视图中展开“Disk I/O”→右键“详细信息”→“查看事件”→筛选“Operation”为“WriteFile”或“ReadFile”,右侧“Stack”列将显示调用该I/O的模块与函数,最底层的模块路径即为被读写的文件物理位置。











