首页 > 其他分享 >arthas火焰图async-profiler在云交易中的运用

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

时间:2024-03-12 11:47:21浏览次数:37  
标签:profiler 火焰 gc 内存 arthas async

在日常工作中经常会遇到系统应用出现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

 

标签:profiler,火焰,gc,内存,arthas,async
From: https://www.cnblogs.com/Jcloud/p/18067952

相关文章

  • Java线上诊断神器Arthas:常用命令详解!
    有关Arthas基本介绍、安装部署、arthasidea插件在上篇文章已经介绍过,这里就不在重述。文章地址:Java诊断工具Arthas:开篇之watch实战上篇重点讲了watch命令。这篇把剩余一些重要命令讲解演示下。一、trace命令作用:展示方法内部调用路径,并输出方法路径上的每个节点上耗时......
  • 理解async 和 await
    1、首先需要理解async和await的基本含义  async是一个修饰符,async定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数//0.async基础用法测试asyncfunctionfun0(){console.log(1)r......
  • Java诊断工具Arthas:开篇之watch实战
    Arthas是阿里开源的线上监控诊断产品,用于问题的排查和诊断。它的出现大大提高线上排查问题的效率,这篇只讲它一个非常牛逼的功能,其它功能往后篇章会在展开详细说。一、Arthas能为你做什么?1、遇到问题无法在线上debug,难道只能通过加日志再重新发布吗?2、我改的代码为什么没有执......
  • Asyncio in Python and Concurrency tasks
    AsyncioLibraryandConcurrencytasksinPythonTheasynciolibraryisaPythonstandardlibrarymoduleusedforwritingsingle-threadedconcurrentcodeusingcoroutines,multiplexingI/Oaccess,andrunningnetworkclientsandservers.Itprovidesafram......
  • spring - mvc - @Async
    @Async@EnableAsync1.启用异步支持@EnableAsync注释在我们的应用程序中启用异步处理。具有类似功能的XML等效项是使用executor属性的task:*命名空间。让我们首先通过Java配置启用异步处理。我们将通过将@EnableAsync添加到配置类来完成此操作:@Configuration@EnableAsync......
  • memray python 内存profiler 工具简单试用
    memraypython内存profiler工具,功能还是很强大的,以下是一个简单使用参考使用安装pipinstallmemray支持的cliusage:memray[-h][-v][-V]{run,flamegraph,table,live,tree,parse,summary,stats,transform,attach,detach}... Memo......
  • vscode 的sync的问题RequestFailed (UserDataSyncError) syncResource:unknown operat
    024-03-0708:58:24.361[error]RequestFailed(UserDataSyncError)syncResource:unknownoperationId:unknown:Connectionrefusedfortherequest'https://vscode-sync.trafficmanager.net/v1/manifest'.atu.D(c:\Debug\VSCode\resources\app\ou......
  • 3 Arthas常用命令和jdk自带工具
    3Arthas常用命令和jdk自带工具Arthas常用命令反编译命令jadArthas进入到对应的进程中jadclasspath输出反编译信息到指定目录dump查看所有的类加载器classloaderdashboard加载进程中堆内存的使用情况以及其他信息heapdump--live文件路径和文件名导出内存快照......
  • 并发编程之asyncio模块
    引言Python中的协程:协程是一种轻量级的用户级线程,它在单线程内执行,不会阻塞主线程,可以在多个任务间轻松地切换,因此可以用于实现异步I/O操作。协程的实现方式与生成器非常相似,通过使用yield语句来暂停和恢复执行。协程可以与asyncio库配合使用,来实现异步I/O操作。这种方式可以......
  • java异步编排工具-asyncTool
    一、介绍一款开源工具AsyncTool:https://gitee.com/jd-platform-opensource/asyncTool是由京东零售的高级工程师编写的,提供了非常丰富的异步编排功能,并且经过了京东内部的测试,是对CompletableFuture的封装和补足二、引入1)、不推荐:maven引入,这个比较坑,客观原因经常会导致依赖下......