開發與維運

是誰在調用我?使用 arthas+jprofiler 做複雜鏈路分析

作者 | 羽涅 阿里巴巴 CCO 技術部技術專家,承擔 CCO 技術部架構治理、基礎技術能力建設方面工作,熱衷開源技術,喜歡折騰電子產品。

【Arthas 官方社區正在舉行徵文活動,參加即有獎品拿~點擊投稿

背景

Arthas 是阿里巴巴開源的應用診斷利器,提供了 profiler 命令,可以生成熱點火焰圖。通過採樣錄製調用鏈路來做性能分析,極大提升了線上排查性能問題的效率。

但是有一個問題,當 async-profiler 全量採樣導出的 svg 文件太大時,想要找到關鍵的調用點,就非常困難。

比如下圖:

1.png

沒有辦法做聚合或過濾,這方面本地的 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:

2.png

3.2 反向分析

View -> Find 查找要分析的類和方法,然後選擇 Analyze -> Calculate Backtraces to Selected Method:

3.png

3.3 分析結果

修改 Summation mode 為 Total times,即可看到這個方法被哪些上游調用到,調用量和佔比。

4.png

總結

  1. 通過 Arthas profiler 命令生成 jfr 文件;
  2. 在本地通過jprofiler來分析jfr文件,定位誰在調用我;
  3. 運用之妙,存乎一心。工具的互相結合,可以產生奇妙的化學反應。

Arthas 徵文活動火熱進行中

Arthas 官方正在舉行徵文活動,如果你有:

  • 使用 Arthas 排查過的問題
  • 對 Arthas 進行源碼解讀
  • 對 Arthas 提出建議
  • 不限,其它與 Arthas 有關的內容

歡迎參加徵文活動,還有獎品拿哦~點擊投稿

阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的公眾號。”

Leave a Reply

Your email address will not be published. Required fields are marked *