Io

htop 從哪里為一個沒有 root 的目前使用者程序收集 IO 讀/寫數據?

  • January 14, 2022

我找不到一種方法來擷取htop有關 IO_RATE IO_READ_RATE IO_WRITE_RATE 的單個程序的輸出。

我需要它(最後幾秒鐘的 IO(或僅 1 秒),而不是整體累積的 IO)來確定程序是否無法正常執行以自動重啟它。

我不能使用iotop它,因為它需要 root,這會使我的工作流程複雜化,主要是因為它顯然是不必要的。

我盡我所能,/proc/$PID/...但沒有發現我可以使用的關於 IO 的字節數。不是它不在那裡,只是我找不到它。

因此,一種通過管道獲取htop輸出的方法也可以作為一種解決方法,但這不是我要問的。

我已經可以獲取top大約 %CPU 的輸出,但這還不夠,我在top.

下面,其他地方的每個答案都是關於 iotop(否)或 htop(無法擷取輸出)或其他沒有幫助的應用程序,所以我決定問這個問題:

monitor IO of a running user’s executable file read/write

https:// stackoverflow.com/questions/469159/an-htop-like-tool-to-display-disk-activity-in-linux(如果atop可以,我仍然不明白如何……)

根據man proc, 您 正在 尋找 的 資訊 應該 站在/proc/(pid)/io:

/proc/

$$ pid $$/io(自核心 2.6.20 起)此文件包含程序的 I/O 統計資訊,例如:/proc/$$ pid $$/io(從核心 2.6.20 開始)…

當然,你很可能找不到這個偽文件,因為它依賴於核心根據一個配置選項生成的額外統計資訊:

CONFIG_TASK_IO_ACCOUNTING(啟用按任務儲存 I/O 記帳)

因此,您應該在確保設置了此選項後重新建構核心。正如您將在上面的連結中看到的那樣,您可能會被限制選擇 misc。其他配置選項。 CONFIG_TASK_XACCT(啟用對 taskstats 的擴展記帳)特別是因為它預設為 no,而 CONFIG_TASK_IO_ACCOUNTING 取決於它。


順便說一句,我不能保證除了 root 和 pid 所有者之外的任何人都可以讀取偽文件。前段時間有很多關於這個問題的討論,它很可能取決於你的核心版本。


注意:這些選項的需要可以從 /usr/src/linux/kernel/tsacct.c 程式碼的閱讀中推斷出來:

#ifdef CONFIG_TASK_XACCT
...
#ifdef CONFIG_TASK_IO_ACCOUNTING
   stats->read_bytes   = p->ioac.read_bytes & KB_MASK;
   stats->write_bytes  = p->ioac.write_bytes & KB_MASK;
   stats->cancelled_write_bytes = p->ioac.cancelled_write_bytes & KB_MASK;
...

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