Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动补全,可以方便的定位和诊断线上程序运行问题。
当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,都可以来分析。
安装与启动
下载arthas-boot.jar:
curl -O https://arthas.aliyun.com/arthas-boot.jar
然后用java -jar的方式启动:
java -jar arthas-boot.jar
注意事项:
arthas-boot使用的jdk版本,需要与要监控的进程jdk版本保持一致,否则会启动失败。
使用指定jdk版本启动:
/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/bin/java -jar arthas-boot.jar
分析步骤
- 通过dashboard命令查看当前系统的实时数据,例如CPU占用率,heap占用率等;
- 如果有CPU占用异常,通过thread命令,查看CPU占用率高的线程的堆栈,找到对应的类和方法再进一步分析;
- 如有堆栈占用异常,在heap占用率高时,通过heapdump 命令下载heapdump文件到本地,分析占用内存高的未被回收的对象,再通过寻找创建对象的方法分析原因;
- 通过profiler命令,分析执行方法的CPU占用率;
- 通过trace命令,可以分析方法内部调用路径和输出方法路径上的每个节点上耗时,在耗时长的路径上思考优化方案;
常用命令
官方命令列表:
arthas.aliyun.com/doc/command…
dashboard命令
dashboard
查看当前系统的实时数据,如CPU占用率,heap占用率等
trace 命令
trace com.thoughtworks.dso.service generateDsoExcel
方法内部调用路径,并输出方法路径上的每个节点上耗时
heapdump 命令
创建到指定文件夹下
heapdump --live /Users/xxx/Documents/dump.hprof
当我们拿到hprof文件后,该如何分析呢,这时候我们可以用到jdk自带的jhat命令进行分析。
创建成功后,我们就可以在指定文件夹下看到对应的dump文件,然后使用命令jhat dump.hprof,生成文件,成功后我们就可以通过IP+端口进行访问了
jhat dump.hprof
如果报错端口被占用,可以指定端口打开
jhat -port 7001 dump.hprof

出现Started HTTP server on port 7000信息时,咱们就可以使用IP+port进行访问了。例如访问 localhost:7001
profiler命令
通过不断的采样,然后把收集到的采样结果生成火焰图。
//启动
$ profiler start
Profiling started
//停止,并生成HTML格式的结果
$ profiler stop --format html
profiler output file: /xxx/arthas-output/20220727-145209.html
OK
在arthas启动的状态下,可以通过浏览器访问http://localhost:3658/arthas-output/ 或启动位置的 arthas-output 下面查看 profiler 结果
常见问题
- 启动时:[ERROR] attach fail, targetPid: XXX
原因:异常退出,导致端口被占用,并且不能通过kill -9 来清除掉这个端口
解决方法:使用同一个端口启动,进入刚刚选择的进程,执行stop命令完全退出