Arthas 是什么?
Arthas
是阿里巴巴开源的 Java
诊断工具,基本使用场景是定位复现一些生产环境比较难以定位问题。可以在线排查问题,以及动态追踪Java
代码,实时监控JVM
状态等等
github
: https://github.com/alibaba/arthas
wiki
: https://alibaba.github.io/arthas/
当你遇到以下类似问题而束手无策时,Arthas
可以帮助你解决:
-
这个类从哪个
jar
包加载的?为什么会报各种类相关的Exception
? -
我改的代码为什么没有执行到?难道是我没
commit
?分支搞错了? -
遇到问题无法在线上
debug
,难道只能通过加日志再重新发布吗? -
线上遇到某个用户的数据处理有问题,但线上同样无法
debug
,线下无法重现! -
是否有一个全局视角来查看系统的运行状况?
-
有什么办法可以监控到
JVM
的实时运行状态?
Arthas 功能特性
-
查看类加载情况
-
反编译
-
热更新
-
分析方法的入参和返回值
-
跟踪慢调用
-
找出阻塞线程
Arthas 的安装与快速启动
-
下载启动
jar
包wget https://alibaba.github.io/arthas/arthas-boot.jar
-
启动
java -jar arthas-boot.jar
常用功能
1. dashboard
当前系统的实时数据面板。
数据说明
-
ID
:Java
级别的线程ID
,注意这个ID
不能跟jstack
中的nativeID
一一对应 -
NAME
: 线程名 -
GROUP
: 线程组名 -
PRIORITY
: 线程优先级,1~10
之间的数字,越大表示优先级越高 -
STATE
: 线程的状态CPU
%: 线程消耗的cpu
占比,采样100ms
,将所有线程在这100ms
内的cpu
使用量求和,再算出每个线程的cpu
使用占比。 -
TIME
: 线程运行总时间,数据格式为分:秒 -
INTERRUPTED
: 线程当前的中断位状态 -
DAEMON
: 是否是daemon
线程
2. thread
查看当前线程信息,查看线程的堆栈。
-
thread
展示所有线程信息 -
thread -n 3
展示当前最忙的3
个线程 -
thread id
显示指定线程的运行堆栈 -
thread -b
找出当前阻塞其他线程的线程
3. trace
跟进方法调用路径,并打印每个方法运行时间
trace com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReportV2
打印方法调用栈信息及运行时间
-
-j 过滤掉
jdk
函数
-j: jdkMethodSkip, skip jdk method trace
-
同时跟踪多个方法
trace -j -E com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReport|dailyReportV2
-
同时跟进多个 耗时超过
10ms
的方法
trace -j -E com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReport|dailyReportV2 '#cost > 10'
4. watch
方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参
-
查看方法入参和返回值
watch com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReportV2 "{params,returnObj}" -x 2
-
只查看方法入参
watch com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReportV2 "{params,returnObj}" -x 2 -b
-
-x
表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是1
-
-e
表示抛出异常时才触发
#cost>200
(单位是ms
)表示只有当耗时大于200ms
时才会输出,过滤掉执行时间小于200ms
的调用
4. sc
查看JVM
已加载的类信息。
-
打印类的详细信息
sc -d com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
-
打印类的详细信息 & 属性信息
sc -d -f com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
-
模糊搜索
sc com.xuebaclass.sato.cont*
5. sm
查看已加载类的方法信息。
-
打印类的详细信息
sm com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
-
打印类的详细信息 & 属性信息
sm -d -f com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
参考
-
https://arthas.gitee.io/commands.html