在哪里可以找到单个进程的 iowait stat(作为文件)

在哪里可以找到单个进程的 iowait stat(作为文件)

我正在编写一个脚本,我需要找到一个文件,其中存储单个进程/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块中的注释:

  1. CPU不会等待I/O完成; iowait 是任务等待 I/O 完成的时间。当CPU因未完成的任务I/O而进入空闲状态时,将在该CPU上调度另一个任务。
  2. 在多核CPU上,等待I/O完成的任务不在任何CPU上运行,因此每个CPU的iowait很难计算。
  3. 在某些情况下,该字段的值可能会减少。

您可以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

相关内容