我有一台运行一些服务的机器,但我不认为它们对这台服务器有时频繁的磁盘访问负责(在长时间几乎没有移动之后,我可以听到巨大的磁头移动)
当再次出现这样的情况时,如何才能找出哪个进程正在对硬盘进行操作呢?
我原本想使用 Linux 命令“lsof”,但是它的输出和选项太多了,所以我什么都看不到。
你能指导我该怎么做吗
- 仅显示硬盘访问
- 这实际上是当前正在发生的物理事件(不是缓冲或仅打开的文件,而是实际的物理读取或写入)
- 也许按用户或流程排序或过滤
如果您能演示一下 lsof 针对这种情况的一些有用选项,那就太好了。谢谢。
编辑感谢大家的回答。这比我预期的要多得多,我给所有答案都点了赞(直到今天)
答案1
尝试查看“iotop“。它将为您提供您所需要的,每个进程的 IO 使用情况,顶部类似,显示。随大多数现代 Linux 发行版提供
答案2
答案3
我也同意 type 实用程序的建议top
。但是,如果您查看 cron 作业,也许能够更快地找到问题的根源。检查内容,看看是否有任何 cron 作业运行会导致大量磁盘 I/O 的进程。它可能只是更新定位数据库/etc/cron.*
这么简单。updatedb
如果服务器允许用户登录,您还应该检查用户 crontab。它们通常位于 中/var/spool/cron/tabs
。
答案4
除非您想要了解正在访问哪些文件的详细信息,否则我相信您也可以使用 来获取此信息top
。我使用htop
(top
包装器)来监视 I/O 使用情况,并将输出按不同的 I/O 字段排序。它提供了以下列供您查看:RCHAR, WCHAR, SYSCR, SYSCW, IO_READ_RATE, IO_WRITE_RATE, IO_RATE
。看看man top
这是否是您需要的。