android的atrace火焰图 arthas 火焰图_java

 arthas简单介绍

        java线上诊断工具,功能强大,可以查看包加载路径,线上跟踪参数的传递,单一接口的入参以及出参,实时观看数据报表,查看cpu,堆内存的使用情况,生成火焰图,热更新代码等,下载安装简单且可配合idea插件快速上手

官方文档:Arthas 用户文档 — Arthas 3.6.2 文档

下载以及安装

官方 Github 下载命令

curl -O https://alibaba.github.io/arthas/arthas-boot.jar

码云下载

curl -O https://arthas.gitee.io/arthas-boot.jar

下载压缩包

android的atrace火焰图 arthas 火焰图_java_02

 进入官方文档,点击下载安装部分,本人使用的就是这种方法将整个包下载下来,在本地使用cmd命令打开黑窗口,并输入:java -jar arthas-boot.jar命令启动


android的atrace火焰图 arthas 火焰图_android的atrace火焰图_03

 这是我提前写好的demo,本地启动该demo后,启动arthas就能找到对应程序

下载的arthas里都会有一个数字游戏的jar包,可以启动该包作为练习使用,通过进入官方文档还可以点击在线教程进行线上练习

demo启动后,启动arthas的界面如下

android的atrace火焰图 arthas 火焰图_jvm_04

 找到自己要进行调试的jar包,输入它的id后回车就可启动,退出arthas要使用stop命令,防止端口被占用

配合idea插件的简单使用

常用命令介绍

watch : 查看方法的入参以及出参

trace  : 方法的耗时

thread: cpu使用情况

tt        : 记录参数的时间隧道

dashboard : 数据面板

jad     :反编译代码


插件:arthas idea

android的atrace火焰图 arthas 火焰图_jar_05

 下载插件后,选中要调试的方法名或者类名就可以获得想要的arthas命令,例如以下命令

android的atrace火焰图 arthas 火焰图_jvm_06

 解决cpu高,死锁,内存溢出等问题

我写了个死循环,通过arthas的方式将其找出来

代码:


android的atrace火焰图 arthas 火焰图_java_07

android的atrace火焰图 arthas 火焰图_ide_08

访问test3,使用thread命令 查看cpu使用情况,高达79

android的atrace火焰图 arthas 火焰图_jvm_09

 访问test4,使用thread命令 查看cpu使用情况 

android的atrace火焰图 arthas 火焰图_jvm_10

 thread -all 会查所有线程的cpu, thread -n 代表线程使用率最高的第n个,

thread -b 代表发生死锁的线程,在里面也能找出我们程序中的类和方法

android的atrace火焰图 arthas 火焰图_java_11


内存溢出代码 

android的atrace火焰图 arthas 火焰图_jvm_12

启动的时候,将堆内存设小一点 ,这里重新启动程序,以及arthas

android的atrace火焰图 arthas 火焰图_ide_13

先使用dashboard查看一下数据面板,堆内存使用情况,

android的atrace火焰图 arthas 火焰图_jar_14

 接着去访问test6,程序终端报出了我们熟悉的内存溢出

android的atrace火焰图 arthas 火焰图_jvm_15

 再观察一下jvm堆的使用情况

android的atrace火焰图 arthas 火焰图_android的atrace火焰图_16

如果内存使用率在不断上升,而且gc后也不下降,后面还发现gc越来越频繁,很可能就是内存泄漏了,这个时候我们可以直接用heapdump命令把内存快照dump出来

使用工具进行分析即可,我这里下载的是idea的分析工具

android的atrace火焰图 arthas 火焰图_ide_17

 

android的atrace火焰图 arthas 火焰图_android的atrace火焰图_18

 

 stop命令退出arthas会撤回所有方法的增强命令