2013-07-30 37 views
1

我需要編寫一個在Linux機器上獲取性能統計信息的應用程序。不幸的是,這個環境內存限制很大,所以使用標準的命令行工具並不是一個真正的選擇,因爲我需要頻繁地對它們進行輪詢。直接從Linux內核訪問系統性能數據

理想情況下,我希望能夠做的是直接從內核獲取性能數據,使用相同的緩衝區和數據來儘可能地減少我的應用程序的RAM需求。將我的應用程序緊密捆綁到Linux內核上並不是真正的問題,我們只有在生產中使用過Linux,而且我看不到真的發生了變化。

我花了最後一兩天看內核源代碼,但我不得不承認有些失落。任何人都可以將我指向正確的位置,以獲取CPU性能信息/ I/O性能信息/網絡性能信息和帶寬使用信息嗎?

+1

如果一個命令行工具可以訪問這些信息,那麼你也可以訪問它,而不必進入內核。您大概可以閱讀您最喜愛的命令行工具的來源,以瞭解它的工作原理。除非有很好的理由,否則不要試圖「活在內核中」。 – nneonneo

+0

看看[Perf](https://perf.wiki.kernel.org/index.php/Main_Page),它可能會有用。 – Eugene

回答

5

我認爲/ proc下有幾個文件,比如/ proc/stat,/ proc/diskstats,/ proc/net/*。

對於CPU性能信息,使用/ proc/stat,文件格式在Linux Kernel源代碼樹的./fs/proc/stat.c文件中定義。

對於磁盤訪問信息,使用/ proc/diskstats,文件格式在Linux Kernel源代碼樹的./block/genhd.c文件中定義,函數爲diskstats_show()。

對於網絡相關的統計信息,可以參考/ proc/net /下的文件。但我不知道如何根據/ proc/net目錄下的文件計算帶寬使用率。

+0

應在用戶應用程序內讀取'/ proc'下的所有文件。它們中的大多數(例如'/ proc/$ pid/stat'或'/ proc/$ pid/maps'應該按順序讀取,就像管道或soqkets一樣)。 –

+0

優秀的答案。謝謝。 – Cromulent