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

京东云开发者
• 阅读 209

在日常工作中经常会遇到系统应用出现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 不正常,如下图。

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



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



堆内存和非堆内存正常。



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



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



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



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



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

二、工具选型及实践

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

1、arthas分析

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



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



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



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



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修改内存空间大小



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



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



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



一次500个



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



3、gceasy分析

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

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



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



4、async-profiler火焰图



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



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

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



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



三、修复上线

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



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 启动火焰图工具进行采样



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



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、下载火焰图



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



7、多种维度:

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



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



8、效果



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





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



CPU\内存等不同的火焰图

9、其他

还可以反编译jar包的代码



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



统计方法调用时间



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





以上。本文旨在通过具体的场景运用和实操,介绍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

点赞
收藏
评论区
推荐文章
捉虫大师 捉虫大师
3年前
盘点golang中的开发神器
本文已收录https://github.com/lkxiaolou/lkxiaolou欢迎star。在Java中,我们用Junit做单元测试,用JMH做性能基准测试(benchmark),用asyncprofiler剖析cpu性能,用jstack、jmap、arthas等来排查问题。作为一名比较新的编程语言,golang的这些工具是否更加好用呢?单元测
Wesley13 Wesley13
3年前
java应用线上诊断神器
前言1、什么是Arthas?Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱(截止2020.9.19githubstar是23K)。通过Arthas我们可以在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。2、Arthas有哪些特性实时查看系统的运行状况查看函数调
Stella981 Stella981
3年前
Arthas 初探
由于在项目中遇到一种情况,某段代码在进行单元测试和在tomcat容器中运行的性能相差数百倍,因此需要分析在不同环境下某个方法执行的具体时间,从而确定问题。Arthas可以做到无侵入的监控应用远行情况。安装安装:wgethttps://alibaba.github.io/arthas/arthasboot.jarj
Wesley13 Wesley13
3年前
Java分析神器
Arthas简介Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。Arthas支持JDK6,支持Linux、Mac、Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能,进一步方便进行问题的定位和诊断。Arthas能帮你解决的问题
Stella981 Stella981
3年前
CloudBeaver docker镜像集成arthas
打算学习下CloudBeaver,但是无奈CloudBeaver源码基于osgi,同时构建依赖的模块复杂,所以基于arthas的火焰图功能梳理简单提供一个CloudBeaver查询的处理流程dockerfile基于已经制作好的FROMdalongrong/cloudbeaver:latest
Stella981 Stella981
3年前
Arthas排查Kubernetes中的应用频繁挂掉重启问题
前言其实最终定位到的问题还是蛮好解决的,但是因为应用在Kubernetes容器中的特殊性,导致在使用Arthas过程中出现了各种问题,所以单独成文和大家分享下。照例先讲下问题发生的背景,一个很老的web系统部署在tomcat容器里。近期打成了镜像丢到了Kubernetes环境中运行,总是各种挂,在Kubernetes层面定位了很久没找到具体问题,但
Wesley13 Wesley13
3年前
Java诊断利器Arthas优雅排查生产环境
!arthas(https://oscimg.oschina.net/oscnet/23f68778f266584b7d4bf30e95a49012825.jpg)前言Arthas是Alibaba开源的Java诊断工具。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。对分秒必争的线上异常,Arthas可帮助我
javalover123 javalover123
1年前
开源Java诊断工具Arthas:开篇之watch实战
还在为排查Java程序线上问题头痛吗,看我们用阿里开源的诊断神器Arthas来帮您
京东云开发者 京东云开发者
12个月前
通过Environment获取属性文件的值,竟然会调用到JNDI服务!!!| 京东云技术团队
一、背景介绍某应用在压测过程机器cpu使用率超过80%,通过工具进行CPU采样生成的火焰图,看到程序中频繁调用environment.getProperty()获取属性值,而其内部调用了JndiPropertySource.getProperty()通过在