我需要按进程 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
这意味着您需要进行大量计算才能获得利用率指标。这就是为什么我认为手动计算这些指标不是一个很有成效的想法。