我们如何使用 /proc 目录按进程 ID 获取进程的 IO 利用率?

我们如何使用 /proc 目录按进程 ID 获取进程的 IO 利用率?

iostat 截图

我需要按进程 ID 了解进程的 IO 利用率,而无需使用任何工具,例如 iostat、iotop 等。

有谁能帮助我使用 /proc/PID 的信息文件获取 IO 利用率吗?

ADV 致谢。

答案1

您可以从 中获取进程的 io 统计信息proc。信息位于/proc/[PID]/io

信息存储如下:

cat /proc/2039/io

rchar: 293898605
wchar: 63376205
syscr: 114996
syscw: 51573
read_bytes: 98484224
write_bytes: 29159424
cancelled_write_bytes: 8192

各字段的定义如下:

rchar:进程读取的字节数,使用任何类似读取的系统调用(从文件、管道、tty……)。

wchar:进程使用任何类似写入的系统调用写入的字节数。

syscr:进程执行的读取类系统调用的次数。

syscw:进程执行的类似写入的系统调用的次数。

read_bytes:进程直接从磁盘读取的字节数。

write_bytes:该进程最初在页面缓存中弄脏的字节数(假设它们稍后会进入磁盘)。

cancellation_write_bytes:进程“取消污染”的字节数 - 例如,使用“ftruncate”调用从页面缓存中截断页面。

来源

有关更多信息/proc/[pid]/io,请参阅文档或这个Stack Overflow 问答

如果您要计算利用率,您还需要来自的统计数据/proc/diskstats。字段的定义在内核文档

但是,正如您所看到的,/proc/diskstats用户使用不同的指标,/proc/[PID]/io这意味着您需要进行大量计算才能获得利用率指标。这就是为什么我认为手动计算这些指标不是一个很有成效的想法。

相关内容