我正在编写一个脚本,我需要找到一个文件,其中存储单个进程/pid/服务的 iowait 的统计信息。有没有这样的文件基于 Debian分布?
也/proc/<pid>/stat
没有/proc/<pid>/io
任何统计数据等待,根据手册页。我知道我可以解析其他工具的输出,例如奥托普,萨尔等等,但是,解析外部命令的标准输出是我必须避免的性能问题。
笔记:我了解/proc/stat
其内容及其含义。我需要等待统计一个单一进程,不适用于整个 CPU 或某个核心。
答案1
理论上,您可以iowait
从 获取每个进程/proc/[pid]/stat
,因为从相应的块过程(5)我们读:
(42) delayacct_blkio_ticks %llu (since Linux 2.6.18)
Aggregated block I/O delays, measured in clock ticks (centiseconds).
我不知道这delayacct_blkio_ticks
实际上意味着什么。无论如何,唯一man proc
对你有用的。
有相关问题,查看一下:使用 proc FS 测量块 I/O 延迟
此外,请注意/proc/stat
每个 CPUiowait
块中的注释:
- CPU不会等待I/O完成; iowait 是任务等待 I/O 完成的时间。当CPU因未完成的任务I/O而进入空闲状态时,将在该CPU上调度另一个任务。
- 在多核CPU上,等待I/O完成的任务不在任何CPU上运行,因此每个CPU的iowait很难计算。
- 在某些情况下,该字段的值可能会减少。
您可以iowait
从 获取每个 CPU 的数据/proc/stat
。在我的 Ubuntu 18.04 中/proc/stat
有这样的部分:
cpu 2752162 16054 941158 49212025 789607 0 217089 0 0 0
cpu0 1397207 7767 500620 24623046 407078 0 70574 0 0 0
cpu1 1354955 8286 440538 24588978 382529 0 146515 0 0 0
cpu
除了s 列之外的第五列是iowait
值就我的具体情况而言。列的数量及其含义可能会有所不同,具体取决于所使用的内核。
要获得每一列的确切含义,您必须查看文档。linux-doc
首先在Ubuntu中安装包:
sudo apt install linux-doc
看看man proc
:
man proc
/proc/stat
每栏都有详细的解释。
另请阅读如何读取Linux /proc/stat文件了解如何计算值。
在 CentOS 中,需要安装kernel-doc
软件包:
yum install kernel-doc
然后读取文件:
/usr/share/doc/kernel-doc/Documentation/filesystems/proc.txt