作者 | 羽涅 阿里巴巴 CCO 技術部技術專家,承擔 CCO 技術部架構治理、基礎技術能力建設方面工作,熱衷開源技術,喜歡折騰電子產品。
【Arthas 官方社區正在舉行征文活動,參加即有獎品拿~點擊投稿】
背景
Arthas 是阿里巴巴開源的應用診斷利器,提供了 profiler 命令,可以生成熱點火焰圖。通過采樣錄制調用鏈路來做性能分析,極大提升了線上排查性能問題的效率。
但是有一個問題,當 async-profiler 全量采樣導出的 svg 文件太大時,想要找到關鍵的調用點,就非常困難。
比如下圖:
沒有辦法做聚合或過濾,這方面本地的 profiler 工具比如 jprofiler、yourkits 就方便很多,有沒有辦法將兩者結合起來呢?
經過分析發現,async-profiler 支持 jfr (Java Flight Recorder) 格式輸出,jprofiler 也支持打開 jfr 快照,成了!具體操作步驟如下:
1. arthas 采樣生成 jfr 文件
啟動 arthas 之后,執行以下采樣命令:
profiler start -f /home/admin/yourAppName/target/arthas-output/%t.jfr -d 180
%t 表示當前時間,-d 后面是采樣秒數,更多參數參見:https://alibaba.github.io/arthas/profiler.htmlhttps://github.com/jvm-profiling-tools/async-profiler/blob/v1.6/src/arguments.cpp
2. 下載 jfr 到本地
可以用 oss 倒騰,或者 szrz 等其他途徑倒騰到本地。
3. jprofiler 分析
在做性能分析時我們常常想要找出:是誰在調用我,是誰調用我最多。下面舉例介紹怎么做的。
3.1 打開快照
使用 jprofiler 打開 jfr 文件,選擇 Open a snapshot, 打開之后選擇 CPU views:
3.2 反向分析
View -> Find 查找要分析的類和方法,然后選擇 Analyze -> Calculate Backtraces to Selected Method:
3.3 分析結果
修改 Summation mode 為 Total times,即可看到這個方法被哪些上游調用到,調用量和占比。
總結
- 通過 Arthas profiler 命令生成
jfr
文件; - 在本地通過
jprofiler
來分析jfr
文件,定位誰在調用我; - 運用之妙,存乎一心。工具的互相結合,可以產生奇妙的化學反應。
Arthas 征文活動火熱進行中
Arthas 官方正在舉行征文活動,如果你有:
- 使用 Arthas 排查過的問題
- 對 Arthas 進行源碼解讀
- 對 Arthas 提出建議
- 不限,其它與 Arthas 有關的內容
歡迎參加征文活動,還有獎品拿哦~點擊投稿
“阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的公眾號。”