Filesystems

監控元數據或映射文件的讀/寫何時命中磁碟

  • April 14, 2014

在託管各種網站的伺服器上,我經常看到 IO 成為瓶頸,而無法使用 iotop、iostat 或 sar 等工具辨識負責 IO 操作的程序。

我懷疑這些程序正在對元數據執行大量 IO(讀取和/或寫入屬性、創建或刪除大量空文件等)。不幸的是,這些操作似乎不是“按程序”計算的,IO 也不是使用記憶體映射文件 (mmap) 執行的。

我的問題是:有沒有辦法監控和/或記帳(例如,使用 cgroups 和 blkio)每個程序或(甚至更好)每個文件的 IO,包括元數據和記憶體映射文件上的 io?

目前,我正在嘗試使用 systemtap 來計算“哪些請求命中磁碟”,探測 handle_mm_fault()(核心中的 mm/memory.c)是否存在主要頁面錯誤,但我無法驗證是否操縱文件系統元數據生成由該函式處理的頁面錯誤。

感謝您的見解!

我想出了一個 systemtap 腳本,它與我想要做的很接近,但它不跟踪寫入。

程式碼很重要:https ://gist.github.com/Martiusweb/10633360

在我的評論之後,我剛剛記住了這個很棒的命令:iotop

iotop  watches I/O usage information output by the Linux kernel (requires
2.6.20 or later) and displays a table of current I/O usage by processes or 
threads on the system.

但是它通常不會安裝,因此由於您的伺服器似乎正在生產中,如果您無法安裝它,您可能想看看這裡。

lsof也是一個很好的命令來檢查程序打開的文件。

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