我们的一个开发箱出现了一个问题,即性能偶尔会下降。发生这种情况时,您可以听到硬盘抖动的声音,但我不知道是什么原因造成的。
这发生在高磁盘访问期间(读/写多 GB 文件),但不是每次都发生,也不是在整个磁盘访问期间发生。这些文件还专门进行了严格的碎片整理,以防止似乎正在发生的那种“寻求颠簸”。
我怀疑问题出在系统的防病毒软件或某些我不知道的磁盘索引服务上(AFAIK,没有任何运行,但是……)。不幸的是,我的 Performance Monitor-fu 非常非常弱(好吧,几乎不存在),我不知道如何确认/反驳我的怀疑或找出真正的罪魁祸首。
更新:
Process Explorer为我找到了罪魁祸首——Java Quick Starter 和 Windows Search 服务。关闭前者会对性能产生显着影响,而关闭后者则会产生巨大影响(尽管没有授予任何文件访问权限)。两者执行的磁盘访问量是任何其他进程的 5-20 倍。
感谢你的帮助!
下载 Process Explorer (sysinternals/microsoft)。
在 View 下,Select Columns,Process Performance,选择例如 IO Write Bytes,IO Read Bytes。
您可以单击这些列进行排序。
SysInternals 有几个工具可能会有所帮助。他们的 PerfMon 工具将为您提供(详尽的)有关访问内容的详细信息。如果它真的是一个进行扫描的 AV 工具,它应该会显着地出现在那里。如果它是一个后台 Windows 任务,事情会变得有点复杂,但这些访问也确实出现在那里。即使哪个服务负责也不太明显。
要验证磁盘 I/O 问题,您需要先在性能监视器中监视每个驱动器上的逻辑磁盘/当前磁盘队列长度。除非您有多个进程访问磁盘,否则这通常应保持为零。过多的 I/O 或较差的磁盘性能会增加队列长度。
验证 I/O 问题后,请使用FileMon或Microsoft Process Monitor ( Sysinternals ) 之类的工具来查看导致该活动的进程。
如果您没有看到与 I/O 对应的进程,则可能是页面文件/内存问题。返回性能监视器并添加每秒内存/页数。这将显示一个进程必须多频繁地访问磁盘以将内存分页到 RAM。如果它保持在零以上,那么您需要更多内存或应用程序存在内存泄漏。要查找内存泄漏,请使用 Process/Pages per second 查看哪个进程正在强制页面。
我已经成功使用 Sysinternals FileMon 来找出哪些程序正在执行大量 I/O 以及使用哪些文件。例如,当我切换到随机写入性能较差的 SSD(4 IOPS,OCZ Core v1)时,FileMon 会告诉我哪些程序正在写入,我可以将这些文件从 SSD 移动到另一个 HDD。它还帮助我发现上次访问时间戳的更新正在扼杀性能(当 Locate32 每天对我的所有磁盘编制一次索引时),所以我能够禁用上次访问时间戳。
您可以将 Perfmon 配置为在满足某些阈值时触发命令,因此 DLux 建议监控当前磁盘队列长度,如果达到 3 或 4 则将其设置为触发批处理文件。批处理文件可以触发像 filemon 这样的实用程序,它可以记录系统访问的所有文件,并且应该更好地了解系统正在访问的内容。
一个可能的罪魁祸首可能是过多的页面文件使用。您可以使用 PerfMon 来跟踪每秒的页面错误。如果当你的表现下降时这些上升,这就是你的答案。