![找到瓶颈:Windows XP 上的磁盘 I/O](https://linux22.com/image/483663/%E6%89%BE%E5%88%B0%E7%93%B6%E9%A2%88%EF%BC%9AWindows%20XP%20%E4%B8%8A%E7%9A%84%E7%A3%81%E7%9B%98%20I%2FO.png)
我们的一个开发箱出现了问题,性能有时会急剧下降。当这种情况发生时,你可以听到硬盘震动的声音,但我不知道是什么原因造成的。
这种情况在磁盘访问量大(读取/写入多 GB 文件)时发生,但并非每次发生,也并非在整个磁盘访问期间发生。这些文件也经过严格的碎片整理,专门用于防止似乎正在发生的那种“寻道抖动”。
我怀疑问题出在系统的防病毒软件或某些我不知道的磁盘索引服务上(据我所知,没有任何正在运行的服务,但是……)。不幸的是,我的性能监视器非常非常弱(好吧,几乎不存在),我不知道如何证实/反驳我的怀疑或找出真正的罪魁祸首。
更新:
进程探索器帮我找到了罪魁祸首——Java Quick Starter 和 Windows Search 服务。关闭前者对性能有明显影响,而关闭后者则对性能影响巨大(尽管没有被授予任何文件访问权)。两者执行的磁盘访问量是其他任何进程的 5-20 倍。
感谢你的帮助!
答案1
下载进程浏览器(sysinternals/microsoft)。
在“查看”、“选择列”、“处理性能”下,选择“IO 写入字节”、“IO 读取字节”。
您可以单击这些列进行排序。
答案2
SysInternals 有几个工具可能对此有所帮助。他们的 PerfMon 工具将为您提供有关访问内容的(详尽)详细信息。如果它确实是 AV 工具在进行扫描,它应该会非常明显地显示在那里。如果它是一个后台 Windows 任务,事情会变得有点复杂,但这些访问确实也会显示在那里。即使哪个服务负责不太明显。
答案3
我已成功使用 Sysinternals FileMon 找出哪个程序正在执行大量 I/O 操作以及针对哪些文件。例如,当我切换到随机写入性能较差的 SSD(4 IOPS,OCZ Core v1)时,FileMon 会告诉我哪些程序正在执行写入操作,然后我就可以将这些文件从 SSD 移动到另一个 HDD。它还帮助我发现更新上次访问时间戳会降低性能(当 Locate32 每天索引我的所有磁盘一次时),因此我能够禁用上次访问时间戳。
答案4
您可以配置 Perfmon 在满足某些阈值时触发命令,因此正如 DLux 建议的那样,监视当前磁盘队列长度,如果达到 3 或 4,则将其设置为触发批处理文件。批处理文件可以触发 filemon 之类的实用程序,它可以记录系统访问的所有文件,这应该可以更好地了解系统正在访问的内容。