• 是谁在调用我?使用 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 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

  • 相关阅读:
    uniapp 小程序分享功能
    uniapp 输入有值后按钮变色
    css 跑马灯
    uniapp 复选框问题
    【Python】where cut query melt函数用法
    【Python】Pivot_table透视表用法及CategoricalDtype自定义排序
    【Python】Merge函数的用法
    【Python】extract及contains方法(正则提取筛选数据)
    Promise
    CSS垂直居中的方法
  • 原文地址:https://www.cnblogs.com/alisystemsoftware/p/13600217.html
Copyright © 2020-2023  润新知