2009-12-09 31 views
12

在* nix上分析C/C++應用程序的最佳工具是什麼? (我希望能夠分析一個混合了(阻塞)文件IO,網絡epoll和fork()/ execv()的服務器,但是一般的幫助和更一般的工具都是)在Linux上的性能分析

您能否在一個概述中獲得RAM,CPU,網絡和磁盤的大系統圖片,並深入研究它?

kernel lists關於諸如perf timechart之類的問題已經有很多討論,但我還沒有發現任何在Ubuntu上出現的東西。

回答

1

編譯-pg,運行該程序,然後使用gprof的

編譯(和連接)與-pg增加了配置代碼和性能分析庫的可執行,然後產生一個文件名爲其是gmon.out包含時間信息。 gprof顯示調用圖表及其(絕對和相對)時間。

有關詳細信息,請參閱man gprof

+0

gprof的問題是,它不能在多線程上工作,並且動態庫很難。 – 2009-12-09 16:59:50

1

如果你可以把你的應用程序到FreeBSD,Mac OS X或Solaris可以使用DTrace,但是DTrace是一個面向分析師的工具 - 比如,你需要驅動它 - 閱讀:腳本。沒有其他任何東西可以爲您提供所需的粒度級別; Dtrace不能簡單地描述用戶域中函數調用的延遲;它也可以跟隨上下文切換到內核。

0

如前所述,FOSS的答案是使用-pg構建,然後使用gprof分析輸出。如果某個產品/項目證明可以投入一些資金,我也會傾向於使用IBM/Rationals Quantify分析器,因爲這樣可以更輕鬆地查看概要分析數據,深入到行級別或在「10000英尺'水平。

當然可能有可用的gprof查看器可以做同樣的事情,但我不知道任何。

1

oprofile可能會讓你感興趣。 Ubuntu應該有你需要的所有軟件包。

2

完整系統分析工具(適用於Solaris,OS X,FreeBSD)的典型示例爲DTrace。但它在Linux上尚未完全可用(您可以嘗試here,但該網站目前暫時關閉,而我自己也沒有嘗試過)。有許多工具可用於在Linux上進行完整的系統分析和內核分析。

你可能會考慮調查:

1

正如在接受的答案中提到的,Zoom可以做一些了不起的事情。我用它來理解線程行爲,直到優化編譯器生成的程序集。

2

Allinea MAP是一個C++和其他本地語言在Linux上的分析器。它由我的僱主提供商業支持。它具有圖形界面和源代碼級別分析和配置文件代碼,幾乎不會出現減速,這使得其他子系統的時序非常準確,例如IO。

Callgrind一直非常有用和準確 - 但減速是〜5倍,所以我只能做更小的運行。它實際上可以計算函數被調用的次數,這對理解漸近行爲很有用。