htop 從哪里為一個沒有 root 的目前使用者程序收集 IO 讀/寫數據?
我找不到一種方法來擷取
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; ...