2012-08-24 41 views
0

我很清楚這個問題的變種之前已經被問過,但我還沒有找到一個特別好的答案。跟蹤進程及其子進程使用的網絡帶寬

我試圖做的是寫一個Python腳本,將測量電流帶寬使用,總上傳的字節數/通過下載的過程和它的所有孩子,如果任何一個值超過殺死它定義的用戶,閾。其目的是限制備份客戶端的網絡使用。

我已經考慮了幾個選項,用於測量過程帶寬:

  • bwmon正是我想要的,但令人沮喪的它不會在目前的形式爲我工作。問題在於它依靠讀取/proc/net/ip_conntrackbytes=packets=字段來測量帶寬。由於某些原因,這些字段對我來說根本不存在 - 我懷疑它可能是做不同的內核版本。

  • 目前我找到的最可行的解決方案是根據this suggestion解析strace -e trace=recvfrom,sendto -p <PID>的輸出。但是,這有點麻煩,並引發了令人討厭的權限問題 - 爲了附加到現有流程,我需要sudo strace,並且我寧願避免在腳本中使用超級用戶特權運行shell命令。

我想知道有沒有人有更優雅的建議?

我不是很熟悉/proc的內容,但是如果有其他日誌文件會列出數據包的大小和數量,那麼我可以修改bwmon來代替它。

回答

3

不是編程相關的答案,但:嘗試這樣做:

sudo modprobe ip_conntrack 
sysctl -w net.netfilter.nf_conntrack_acct=1 

啓用模塊的sysctl統一設置爲特定的分佈,但至少直到你重新啓動,bwmon應該如果需要bytes工作和/proc/net/ip_conntrack中的packets

基於http://ubuntuforums.org/showthread.php?t=2046187http://forums.gentoo.org/viewtopic-p-6677939.html(從而最終在谷歌上)。

+0

不錯,這似乎有訣竅:現在'/ proc/net/ip_conntrack'報告'bytes ='和'packets =',現在'bwmon'似乎工作正常! 對於任何可能感興趣的人,我在'/ etc/modules'中添加了'ip_conntrack',以便在啓動時加載'net.netfilter.nf_conntrack_acct = 1'到'/ etc/sysctl。 conf'來記錄數據包大小並持續計數。 –