Linux

在哪裡可以找到單個程序的 iowait stat(作為文件)

  • July 30, 2018

我正在編寫一個腳本,我需要找到一個文件,其中儲存了單個程序/pid/服務的 iowait 的統計資訊。在基於Debian 的發行版上是否有任何這樣的文件?

根據手冊頁,也/proc/<pid>/stat沒有iowait/proc/<pid>/io的任何統計資訊。我知道我可以解析其他工具(如iotopsar等)的輸出,但是,解析外部命令的標準輸出是我必須避免的性能問題。

注意:我知道/proc/stat它的內容及其含義。我需要單個程序的iowait stat ,而不是整個 CPU 或核心。

理論上,您可以從 中獲取iowait每個程序,因為我們從PROC(5)/proc/[pid]/stat的相應塊中讀取:

(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值。列數及其含義可能因您使用的核心而異。

要獲得每一列的確切含義,您必須查看您的文件。首先在 Ubuntu 安裝linux-doc包中:

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

引用自:https://unix.stackexchange.com/questions/459288