写点什么

arthas 火焰图 async-profiler 在云交易中的运用

  • 2024-03-12
    北京
  • 本文字数:1559 字

    阅读完需:约 5 分钟

在日常工作中经常会遇到系统应用出现full gc、cpu内存飙高等场景,如果想要快速解决这些线上问题就需要首先能快速定位,最好能定位到具体代码。本文旨在通过一款线上监控诊断产品,阿里巴巴的arthas(阿尔萨斯)内部集成的火焰图工具async-profiler结合自身系统应用中的使用,方便我们能够快速定位线上问题。

一、背景

1、在订单域任务系统,master 机器和 slaver 机器频繁出现 full gc 和 cpu 间歇性升高的现象,young GC 也出现平均 1 分钟 10 次。master 机器线程也增加到 1500 左右。系统应用采用的是 CMS 垃圾回收器,4c8g 分配堆内存大小 4G。但是堆内存和非堆内存正常。


2、随着时间推移,full gc 从每隔 20 分钟一次变成 每个 5 分钟或者 3 分钟一次,stop the world。FULL GC 和 Young GC 不正常,如下图。




堆内存和非堆内存正常。



CPU 一分钟一次达到高点,部分机器达到 75%以上。线程,在上午超过 1400,重启后正常。




系统稳定性受到挑战,需要尽快排查出问题所在。

二、工具选型及实践

市面上很多排查工具,怎样才能快速排查出问题。结合 arthas、async-profiler 火焰图(采样)、visualVM(跨时间 dump 文件对比)、gceasy 这四种工具,都进行实战对比。

1、arthas 分析

下图分析 master 机器是反序列化商品域渠道配置接口对象耗 CPU



下图也发现反查快手任务也会引起高 cpu。分析这台机器既是 master,又是 slaver。slaver 会执行反查快手任务。


2、visualVM 分析

dump 两个文件,跨时一天,进行对比。


启动 visualVM


cd /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/bin


jvisualvm


/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/lib/visualvm 目录下 visualvm.conf 修改内存空间大小



对比发现,最大是查询 ES 的数据,反序列化对象并不是最大,但是也能在 dump 文件中查找到。因为 arthas 查的是 CPU 和线程,dump 文件是内存,所以不完全一致。



一次 500 个


3、gceasy 分析

修改 jvm,-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:./gc.log,打印 gc 日志。


通过gceasy.io线上对比工具,没有内存泄露,但是也未发现 gc 产生的具体原因。


4、async-profiler 火焰图


从上图,看到主要分为两大部分,左边的反查快手任务(因 master 机器,既是 master,也是 slaver),右边是扫描 es 里面代扣任务的反序列化对象占用很大比重。和 arthas 分析的一样。


下载内存火焰图, 可以看到左边也是快手反查,右边则是查询 ES(包含反序列化对象)。和 dump 文件比较能核对上。


三、修复上线

根据上述四种工具的排查过程,可以明显看到使用 arthas 集成的 async-profiler 更直观和方便,便于定位问题。在修改对应的代码后,上线进行后续观察系统稳定正常。


四、使用步骤

async-profiler 火焰图。


1、申请堡垒机(root 权限)


2、登陆以后下载 最新的 jar 包 wget https://alibaba.github.io/arthas/arthas-boot.jar


3、安装(admin 权限 cd)java -jar arthas-boot.jar


4、查看 cpu 耗时、dashboard(q 命令表示退出)、thread


5、profiler start 启动火焰图工具进行采样



https://jlynet.github.io/2021/08/07/Java%E8%AF%8A%E6%96%AD%E5%B7%A5%E5%85%B7Arthas%E9%AB%98%E7%BA%A7%E5%91%BD%E4%BB%A4%E6%95%99%E7%A8%8B/Arthasprofiler%E5%91%BD%E4%BB%A4/
复制代码


profiler getSamples


profiler status


profiler stop --format html。生成火焰图


6、下载火焰图



7、多种维度:


lock 锁对象\alloc 内存\默认 cpu



8、效果




CPU\内存等不同的火焰图


9、其他


还可以反编译 jar 包的代码



统计方法调用时间



以上。本文旨在通过具体的场景运用和实操,介绍 arthas 火焰图如何在系统中快速定位问题,欢迎感兴趣的同事一起学习探讨。

五、参考资料

https://gceasy.io/diamondgc-report.jsp?oTxnId_value=e8692cc6-f79d-467c-8e90-6aa96f1b429d


https://blog.csdn.net/lkx444368875/article/details/104906673


https://blog.csdn.net/CoderBruis/article/details/101234738

发布于: 35 分钟前阅读数: 5
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
arthas火焰图async-profiler在云交易中的运用_京东科技开发者_InfoQ写作社区