是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

作者 | 羽涅 阿里巴巴 CCO 技术技术专家,承担 CCO 技术部架构治理、基础技术能力建设方面工作,热衷开源技术,喜欢折腾电子产品。

【Arthas 官方社区正在举征文活动,参加即有奖品拿~点击投稿】

背景

Arthas 是阿里巴巴开源的应用诊断利器,提g . {供] v { m ~ _ ] {了 profiler 命令,可以生成热点火焰图。* - K通过采样录制调用链路来做性能分析,极大提升了线上$ Q ` b排查性能问题Q P g 0 ~ (的效率。

但是有一个问题,当 async-profiler 全量采样导出的& ~ @ svg 文件太大时d m l f,想要找到关键的调用n ` j c !点,就非常困难。

比如下图:

是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

没有办法做聚合或过滤,这方面本地的 profiler 工具比如 jprofile, r D *r、yourkits 就方便很多,有没有办法将两者结合起来呢?

经过分析发现,async-profiler 支持 jfr (Jz q o 9 e B q K vava Flightk c I ) } s + A Recorder) 格式输出,jprofileJ V t f 3 r v @r 也支持打开 jfr 快照,成了!具体操作步骤如下:

1. arthas 采样生成 jfr 文件

启动 arthas 之后,执以下采样命令:

profiler s _ _ a ( ztart -f /home/admin/yourAppName/target/arthas-output/%t.jfr -d 180

%t 表示当前时间,-d 后面是采样秒数,更多参数参见:https://alibaba.githuY ; Sb.io/arthaY 6 K 2s/profiler.htm N 9 n glhttps://github.com/jvm-profiling-too p ~ 7 w _ 1ls/async-profiler/blob/? t . C n B ,v1.6/src/arguments.cpp

2. 下载 jfr 到本地

可以用 oss 倒腾,或者 szrz 等其他C m G Q 3途径倒腾到本地。

3. jprofiler 分析

在做性能分析时我们常常想要找出:是谁在调用我,是谁调用我最多。下面举例介绍怎么做的。

3.1 打开快照

使用 jprofiler 打开 jfr 文件,选择 Open a snapshot, 打开之后W q $ 3 g f *选择 CPU views:

是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

3Z ; { ` / x O D ?.2 反向分析

View ->a o _ r; Finb 2 @ x _d 查找要分析的类和方法,然后选择 Analyze -> Calculate Backtraces to1 ^ s d R Selected Method:

是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

3.3 分析结果

修改 Summatio0 w 9 hn mode 为 Totay m ? q Ul times,即可看到这个方法被哪些上游调用到,调用量和占比。| r . ? E z ! U

是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

总结

  1. / V .过 Arthas profiler 命令生成 jfr 文件;
  2. 在本地通过jprofiler来分析jfr文件,定位谁在调用我;
  3. 运用之妙,存乎一心。工具的互相结合,可以产生奇妙的化学反应。

Arthas 征文活动火热进行中

Arthas 官方正在举行征文活动,如果你有:

  • 使用 Arthas 排查过的问题
  • 对 Arthas 进行源码解读
  • 对 Arthas 提出建议
  • 不限,其它与n ] { : c p 7 Arthas 有关的内容

    欢迎参加征文活动,还有奖品拿哦~点击投稿

“阿里巴巴P _ g q ~ Q v原生关注微服务、SeY ^ L ? 5 T + x srverless、容器、ServicX j [e Mesh 等技术领域、聚焦原生流行技术趋m w Z 4势、云原生大规模的落地实践,做最懂云原生开发者的公众号。x - f d $ r