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

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

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

背景

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

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

好比下圖:less

1.png

沒有辦法作聚合或過濾,這方面本地的 profiler 工具好比 jprofiler、yourkits 就方便不少,有沒有辦法將二者結合起來呢?jvm

通過分析發現,async-profiler 支持 jfr (Java Flight Recorder) 格式輸出,jprofiler 也支持打開 jfr 快照,成了!具體操做步驟以下:async

1. arthas 採樣生成 jfr 文件

啓動 arthas 以後,執行如下采樣命令:ide

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.cppsvg

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 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的公衆號。」

相關文章
相關標籤/搜索