我想知道是否有一種有效的解決方案來監控Linux中的進程資源消耗(CPU,內存,網絡帶寬)。我想在C++中編寫一個守護進程,爲一些給定的PID執行此監視。據我所知,經典的解決方案是定期讀取/ proc中的信息,但這似乎並不是最有效的方式(它涉及很多系統調用)。例如,要監視50個進程每秒的內存使用情況,我必須每秒從/ proc打開,讀取和關閉50個文件(即150個系統調用)。更不用說在閱讀這些文件時涉及的解析。Linux中每個進程的編程資源監控
另一個問題是網絡帶寬消耗:對於我想要監視的每個進程,這不能輕鬆計算出來。 NetHogs採用的解決方案涉及到相當高的開銷,我認爲它使用libpcap捕獲和分析每個數據包,然後爲每個數據包確定本地端口並在/ proc中搜索以查找相應的進程。
你知道是否有更有效率的替代方法提出這些方法或任何庫處理這個問題?
taskstats只包含磁盤I/O,不包括網絡和磁盤 – tuxx 2009-11-03 20:27:05
糾正:taskstats只監視讀/寫系統調用,而不是recv/send和朋友(但是這個可以在內核中輕鬆修改)。不管怎麼說,還是要謝謝你。這似乎是迄今爲止最好的解決方案。 – tuxx 2009-11-04 17:40:22