一、下载jar包
https://arthas.aliyun.com/arthas-boot.jar
二、安装(windows系统)
cmd窗口,进入到jar的所在路径,运行:java -jar arthas-boot.jar
如图选项2,是本地的一个正在启动的服务,输入2,回车,即开始监控这个java服务
注意:如果已经在监控一个端口,想要关闭并监控另一个端口
如下是关闭25648端口命令
java -jar arthas-boot.jar --telnet-port 25648 --http-port -1
关闭后即可重新选择
三、常用命令
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命令 查看当前 JVM 的线程堆栈信息
**thread **查询全部线程
thread -n 5 打印前5个最忙的线程并打印堆栈
thread -all 显示所有匹配的线程
thread -n 3 -i 1000 列出1000ms内最忙的3个线程栈
thread –state WAITING 查看指定状态的线程,(TIMED_WAITI、WAITING、RUNNABLE等等)
thread -b 找出阻塞其他线程的线程,当出现死锁后,会提示你出现死锁的位置
3、sc 查看 JVM 已加载的类详细信息
Search-Class
的简写,这个命令能搜索出所有已经加载到 JVM 中的 Class 信息,sc -d *MathGame
如果搜索的是接口,还会搜索所有的实现类。比如查看所有的 Filter 实现类:
sc javax.servlet.Filter
-d 参数可以打印出类加载的具体信息,方便定位类加载问题
sc 支持通配符,比如搜索所有的 StringUtils:
sc *StringUtils
打印类的 Field 信息:
sc -d -f demo.MathGame
4、sm 查看已加载类的方法信息
Search-Method 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息。
sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到
查看 String 类的全部方法:
sm java.lang.String
查看具体方法的信息:
sm java.lang.String toString
通过 -d 参数可以打印函数的具体属性,展示每个方法的详细信息():
sm -d com.freemud.calculation.service.impl.CalculationService
5、jad 反编译指定已加载类的源代码
jad com.entity.CartGoodsBo 将内存加载的class反编成代码和classloader信息(注:不是源代码)
jad --source-only demo.MathGame 将内存加载的class反编译成java代码
6、trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
监控追踪OrderRightsServiceImpl 类下面的getOrderRights方法
trace com.freemud.calculation.service.impl.OrderRightsServiceImpl getOrderRights
7、watch 观察方法调用情况
params查看入参,returnObj 查看返回
watch com.freemud.calculation.service.impl.RightsQueryServiceImpl queryMemberPaidRights params
watch com.freemud.calculation.service.impl.RightsQueryServiceImpl queryMemberPaidRights returnObj
8、vmtool 查询内存对象,强制 GC 等功能
强制GC:vmtool --action forceGc
获取对象:vmtool --action getInstances --className java.lang.String --limit 10
interrupt 指定线程:vmtool --action interruptThread -t 1