是谁在调用我?使用 arthas+jprofiler 做复杂链路分析
作者 | 羽涅 阿里巴巴 CCO 技术部技术专家,承担 CCO 技术部架构治理、基础技术能力建设方面工作,热衷开源技术,喜欢折腾电子产品。
【Arthas 官方社区正在举行征文活动,参加即有奖品拿~点击投稿】
背景
Arthas 是阿里巴巴开源的应用诊断利器,提供了 profiler 命令,可以生成热点火焰图。通过采样录制调用链路来做性能分析,极大提升了线上排查性能问题的效率。
但是有一个问题,当 async-profiler 全量采样导出的 svg 文件太大时,想要找到关键的调用点,就非常困难。
比如下图:
没有办法做聚合或过滤,这方面本地的 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:
3.2 反向分析
View -> Find 查找要分析的类和方法,然后选择 Analyze -> Calculate Backtraces to Selected Method:
3.3 分析结果
修改 Summation mode 为 Total times,即可看到这个方法被哪些上游调用到,调用量和占比。
总结
- 通过 Arthas profiler 命令生成
jfr
文件; - 在本地通过
jprofiler
来分析jfr
文件,定位谁在调用我; - 运用之妙,存乎一心。工具的互相结合,可以产生奇妙的化学反应。
Arthas 征文活动火热进行中
Arthas 官方正在举行征文活动,如果你有:
- 使用 Arthas 排查过的问题
- 对 Arthas 进行源码解读
- 对 Arthas 提出建议
- 不限,其它与 Arthas 有关的内容
欢迎参加征文活动,还有奖品拿哦~点击投稿
“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源 Flink + 实时计算 Flink 版训练营学习资料汇总
Apache Flink:全球领先的开源大数据计算引擎 Apache Flink 是一个开源的分布式大数据处理引擎, 可对有限数据流和无限数据流进行有状态计算。作为 Apache 软件基金会 (ASF) 顶级项目之一,Flink 在流处理方面具有绝对的优势,提供高吞吐、低延时的计算能力, Exactly-once 语义保证数据的准确性,亚秒级别的处理延迟确保业务的快速响应。 作为快速发展的新一代大数据引擎,Flink 本身的架构优势也吸引着越来越多的开源爱好者投入到社区的建设来。 截止到 2020 年 7 月,社区的 star 数达到 13600+ ,contributor 数达到 718,有 22989 次 commits。伴随着社区的快速发展,Flink 也成为类似阿里巴巴、腾讯、字节跳动、滴滴、美团点评等知名公司建设流处理平台的首选。 【推荐阅读】 Flink 社区技术发展风向标 重磅!Apache Flink 1.11 功能前瞻抢先看! 更易用!Hive 集成弯道超车 Hive 终于等来了 Flink Flink PMC 联合各大厂用人主管助你升职加薪 Flink 面试指南 【...
- 下一篇
Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)
前言 从上篇开始,我们进入到了高可用的章节,上篇提到的熔断能力,是历年保障大促当天晚上整个系统不被洪峰流量打垮的法宝,本篇介绍的措施与熔断有不一样的地方,一个是线上洪峰来临时的保护措施,他更多的是流量低峰或者在专门的演练环境中,针对可能遇见的各类故障,采取演练的手段,来窥探对业务的影响。他的主要目的是让我们自己更加了解自己业务系统的薄弱环节,以便来对症下药增强系统的高可用能力。本文重点介绍为什么要做混沌工程以及如何使用 ChaosBlade 工具和 AHAS 平台快速实施混沌工程。 为什么需要混沌工程 任何一个系统都会有未曾可知的故障出现,拿现代工艺已经很好的磁盘来说,有统计数据的磁盘最低的年故障率都可达到 0.39% 。即便是这么底层基础设施,也会有这么高的不确定性。尤其当下大部分的服务形态都是分布式架构,在分布式系统架构下,服务间的依赖日益复杂,更很难评估单个服务故障对整个系统的影响;并且请求链路长,监控告警的不完善导致发现问题、定位问题难度增大;同时业务和技术迭代快,如何持续保障系统的稳定性和高可用性受到很大的挑战。 云原生系统挑战更大 谈到云原生,可以说云原生是一个理念,主要包...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- MySQL8.0.19开启GTID主从同步CentOS8