如何追踪 Linux 上的永久磁盘访问

如何追踪 Linux 上的永久磁盘访问

我有一台运行一些服务的机器,但我不认为它们对这台服务器有时频繁的磁盘访问负责(在长时间几乎没有移动之后,我可以听到巨大的磁头移动)

当再次出现这样的情况时,如何才能找出哪个进程正在对硬盘进行操作呢?

我原本想使用 Linux 命令“lsof”,但是它的输出和选项太多了,所以我什么都看不到。

你能指导我该怎么做吗

  • 仅显示硬盘访问
  • 这实际上是当前正在发生的物理事件(不是缓冲或仅打开的文件,而是实际的物理读取或写入)
  • 也许按用户或流程排序或过滤

如果您能演示一下 lsof 针对这种情况的一些有用选项,那就太好了。谢谢。

编辑感谢大家的回答。这比我预期的要多得多,我给所有答案都点了赞(直到今天)

答案1

尝试查看“iotop“。它将为您提供您所需要的,每个进程的 IO 使用情况,顶部类似,显示。随大多数现代 Linux 发行版提供

答案2

通常,当您的系统中服务/应用程序没有执行大量的磁盘 I/O,但您注意到有很多硬盘活动时,您会发现系统交换了很多。

这篇文章很好地解释了其工作原理:

使用 vmstat 监控虚拟内存

答案3

我也同意 type 实用程序的建议top。但是,如果您查看 cron 作业,也许能够更快地找到问题的根源。检查内容,看看是否有任何 cron 作业运行会导致大量磁盘 I/O 的进程。它可能只是更新定位数据库/etc/cron.*这么简单。updatedb

如果服务器允许用户登录,您还应该检查用户 crontab。它们通常位于 中/var/spool/cron/tabs

答案4

除非您想要了解正在访问哪些文件的详细信息,否则我相信您也可以使用 来获取此信息top。我使用htoptop包装器)来监视 I/O 使用情况,并将输出按不同的 I/O 字段排序。它提供了以下列供您查看:RCHAR, WCHAR, SYSCR, SYSCW, IO_READ_RATE, IO_WRITE_RATE, IO_RATE。看看man top这是否是您需要的。

相关内容