arthas jprofiler做复杂链路的调用分析

作者:横云断岭 时间:2022-01-15 12:01:25 

背景

Arthas是阿里巴巴开源的应用诊断利器,提供了profiler命令,可以生成热点火焰图。通过采样录制调用链路来做性能分析,极大提升了线上排查性能问题的效率。

但是有一个问题,当async-profiler全量采样导出的svg文件太大时,想要找到关键的调用点,就非常困难。

比如下图:

arthas jprofiler做复杂链路的调用分析

没有办法做聚合或过滤,这方面本地的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://arthas.aliyun.com/doc/profiler.html

https://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

arthas jprofiler做复杂链路的调用分析

3.2 反向分析

View -> Find 查找要分析的类和方法,然后选择 Analyze -> Calculate Backtraces to Selected Method

arthas jprofiler做复杂链路的调用分析

3.3 分析结果

修改Summation mode 为Total times,即可看到这个方法被哪些上游调用到,调用量和占比

arthas jprofiler做复杂链路的调用分析

总结

  • 通过Arthas profiler命令生成jfr文件;

  • 在本地通过jprofiler来分析jfr文件,定位谁在调用我;

  • 运用之妙,存乎一心。工具的互相结合,可以产生奇妙的化学反应。

来源:https://blog.csdn.net/hengyunabc/article/details/107948158

标签:arthas,jprofiler,复杂链路,调用
0
投稿

猜你喜欢

  • Spring boot中@Conditional和spring boot的自动配置实例详解

    2023-06-20 09:36:14
  • @RequestBody的使用详解

    2023-03-08 04:17:28
  • Java基于IO流读取文件的方法

    2023-08-11 16:23:57
  • java线程池详解及代码介绍

    2023-09-16 07:21:57
  • Java 通过反射给实体类赋值操作

    2023-11-26 10:11:41
  • Java SSM框架如何配置静态资源加载

    2023-03-22 17:40:01
  • JVM内存增强之逃逸分析

    2022-01-23 00:22:08
  • Java 代理(Proxy)的原理及应用

    2023-08-21 08:40:41
  • Java实现宠物商店管理

    2023-09-14 09:14:13
  • mybatis中sql语句CDATA标签的用法说明

    2021-08-08 14:14:49
  • Spring Boot整合Kafka教程详解

    2023-06-14 06:02:54
  • 详解Spring中的FactoryBean

    2022-06-08 05:29:55
  • Java源码解析HashMap成员变量

    2023-04-24 07:20:22
  • java shiro实现退出登陆清空缓存

    2023-06-18 16:10:39
  • Java实现简易Web服务器

    2023-11-17 09:10:11
  • mybatis水平分表实现动态表名的项目实例

    2023-04-02 22:11:42
  • Java C++ 算法题解leetcode652寻找重复子树

    2022-08-17 23:58:09
  • spring boot学习笔记之操作ActiveMQ指南

    2023-09-12 20:11:52
  • Java的封装类和装箱拆箱详解

    2023-09-20 22:41:22
  • Maven引入本地Jar包并打包进War包中的方法

    2023-06-16 12:43:28
  • asp之家 软件编程 m.aspxhome.com