2017-03-22 61 views
0

我想爲我的應用程序收集一些性能分析數據,然後運行perf工具和Flame Graphs。Ubuntu 16.04 LTS - 如何啓用perf工具的符號

我指在此SlideShare上提供的說明:https://www.slideshare.net/brendangregg/java-performance-analysis-on-linux-with-flame-graphs

下面是我運行命令:

1. sudo perf record -F 997 -a -g 
2. sudo perf script > out.stacks01 

當運行所述第二命令時,它顯示以下消息:

Failed to open /tmp/perf-9931.map, continuing without symbols. 
no symbols found in <some path>, maybe install a debug package? 

我做了一些在線瀏覽,並嘗試安裝調試包,如在此提到的:https://gist.github.com/NLKNguyen/2fd920e2a50fd4b9701f

然而,當我運行「sudo易於得到更新」,它最終失敗說「無法抓取......」

可能有人弄清楚是怎麼回事?我需要做什麼才能正確安裝調試符號包?

編輯: 我的關鍵問題是我生成的火焰圖沒有Java符號,因此我最終關注了上面的錯誤/消息。以下接受的答案爲我原來的帖子提供了一個非常好的解釋。不過,我可以通過運行jmaps來解決我的問題,如下圖所示:

sudo perf record -F 997 -a -g -- sleep 300; jmaps 

這上面共享幻燈片共享鏈接指令進行了說明。

+0

*「也許安裝調試軟件包?」* – Jakuje

+0

是的,這就是它所說的,我不知道如何可以正確安裝它。 – pree

+0

http://manpages.ubuntu.com/manpages/precise/en/man1/debuginfo-install.1.html – Jakuje

回答

2

Failed to open /tmp/perf-9931.map消息不是關於不正確的debuginfo - 它是關於通過JIT生成的分析代碼(並且Java通常從帶有JIT的類文件生成機器代碼),當時沒有與perf profiling代理運行兼容。

http://www.brendangregg.com/perf.html#JIT_Symbols有推薦「Java可以做到這一點與穿孔 - 地圖 - 代理」使用https://github.com/jvm-profiling-tools/perf-map-agent這將產生PERF的地圖文件:

架構

Linux的PERF工具將期望符號代碼從/tmp/perf-.map的未知 內存區域執行。這允許 即時生成代碼的運行時提供動態符號映射,以便與工具套件一起使用 。

perf-map-agent是將爲Java應用程序生成此類映射文件的代理程序。它由寫入C的Java代理和一個小型的自舉應用程序組成,該應用程序將代理程序附加到運行中的Java進程中。

當代理連接時,它會指示JVM在運行時爲各種目的報告由JVM生成的代碼塊 。重要的是,這包括JIT編譯的方法,但也包括各種動態生成的基礎結構部分,如動態創建的解釋器,適配器和用於虛擬調度 (請參閱vtable和itable條目)的跳轉表。代理創建一個 /tmp/perf-。它用一行代碼blob 填充一個映射文件,該映射文件將內存位置映射到代碼blob名稱。

Java應用程序將Java進程的PID作爲參數 ,並將任意數量的附加參數傳遞給代理的 。然後它附加到目標進程並指示它加載代理庫 。

而且在https://www.slideshare.net/brendangregg/java-performance-analysis-on-linux-with-flame-graphs格雷格使用的OpenJDK的特殊砍死構建 - 滑36 - 「-XX:+PreserveFramePointer•我砍死了OpenJDK x86_64的支持幀指針」。

而從臺41格雷格談論/tmp/perf-*.map文件:

定影符號

•對於這些JIT過的代碼,Linux的PERF已經尋找外部提供的符號文件:/ tmp目錄/穿孔 - PID .MAP,並警告說,如果不存在 •這個文件可以通過Java代理

# perf script 
Failed to open /tmp/perf-8131.map, continuing without symbols 

創建它(也請參閱lkml for「perf:添加對分析代碼的支持」 - https://lwn.net/Articles/633846/和其他)

相關問題