查找在特定驱动器上产生大量 IO 负载的进程

查找在特定驱动器上产生大量 IO 负载的进程

我们的一个基于 Debian 的 Proxmox 虚拟机管理程序在 Raid1 HDD 阵列上存在高 IO 负载问题,该阵列主要用于在其上运行的 Linux VM 的根文件系统和主文件系统。

我们有基于 CollectD 的图表,可以清楚地看到几天前读取操作的数量发生了巨大变化。但是,这些图表并不能看出哪个过程导致了负载。

是否有类似 iotop 或 dstat 的工具可以显示产生最大负载的进程,但仅限于特定驱动器?由于服务器还具有高负载的 SSD 阵列,因此这些工具的所有结果都完全无用。

答案1

有一个工具可以显示对给定块设备生成块设备访问的进程。然后,您可以利用结果数据找出导致最大 I/O 负载的原因:blktrace和它的同伴blkparse. 手册页中有几个示例。

例如:

% blktrace -d /dev/sda -o - | blkparse -i -

或者简单地使用btrace包装器:

% btrace /dev/sda

将显示实时活动/dev/sda,包括具有 PID 和名称的用户进程,以及内核线程(例如:dmcrypt 线程),以及停止时的一些统计信息(不包括任何进程)。

标准模式是先blktrace记录,然后再blkparse进行解释。

通过改变过滤面罩blktrace输出格式然后blkparse应该向管道中的另一个工具提供适当的信息,该工具负责对相关结果进行排序并将其与其他来源(如流程会计或其他日志)关联。

相关内容