Monitoring

有沒有工具可以監控單個程序的頻寬使用情況?

  • February 5, 2011

我找到了一個不錯的監視器,它允許我記錄單個程序的各種執行時數據。我正在尋找對頻寬使用有相同作用的等價物。理想情況下,命令應該看起來像bwmon --pid 1 --log init.log. 有這樣的嗎?它可以在沒有管理員權限的情況下執行嗎?

如果您對使用的一般 I/O 頻寬感到滿意(或者如果您的程序幾乎完全是網路 I/O),那麼您可以觀看該/proc/<pid>/io文件。你想要rcharandwchar欄位。您可能需要減去read_bytesand write_bytes,因為它們代表對儲存層的讀取和寫入。請參閱http://www.kernel.org/doc/Documentation/filesystems/proc.txt的第 3.3 節。

如果您需要更多解析度….您可以使用lsofand編寫腳本strace,儘管正確處理所有極端情況會很痛苦。基本思想是解析 的輸出,從、、和呼叫中strace -p <pid>獲取第一個參數(= 文件描述符)和返回值(= 字節數) (注意還有幾個系統呼叫要監聽;我沒有t 將它們全部追踪)。丟棄負值;它們表示錯誤。用於確定哪些文件描述符是 TCP/UDP 套接字,並將每個 fd 的計數相加。只要您擁有正在檢查的程序,此策略就不需要root,但是寫起來真的很麻煩,更不用說寫得好了。read()``write()``send()``recv()``lsof -p <pid>

嘗試nethogs

NetHogs 是一個小型的“網頂”工具。它不像大多數工具那樣按協議或子網分解流量,而是按程序對頻寬進行分組。NetHogs 不依賴一個特殊的核心模組來載入。如果突然出現大量網路流量,您可以啟動 NetHogs 並立即查看是哪個 PID 導致了這種情況。這可以很容易地辨識已經瘋狂並突然佔用您的頻寬的程序。

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