下载arthas
windows:https://alibaba.github.io/arthas/arthas-boot.jar mac/linux:https://arthas.aliyun.com/arthas-boot.jar
源码及文档
https://github.com/alibaba/arthas https://arthas.aliyun.com/doc/en/
启动arthas
java -jar /opt/arthas/arthas-boot.jar
输入模块编码
[1] : 1 demo.jar [2] : 200 demo2.jar 输入:1
Watch命令
//作用 watch命令是监控某个类的某个方法的执行情况,包括入参,当前对象的属性,返参,异常情况。 //命令: watch 包名.类名 方法名 "{params,target,returnObj,throwExp}" "#cost>10&¶ms[1]==101" -b -f -x 2 //参数:
1. 该命令表示显示方法的入参、异常堆栈,当前对象属性,返回值,分别对应params,target,returnObj,throwExp
2. throwExp要放最后,否则打不出异常,如果watch命令后面加上-e表示只有出现异常才会捕获
3. #cost>10表示耗时大于10ms,params[1]==101表示第1个参数值等于101,用&&表示交集
4. 默认没有加-b的情况下,params表示的是函数返回时,入参的值,而不是函数调用前的入参值,所以可以加上-b -f,这时一个结果是函数调用前入参值(不会有异常和返回值),
第二个结果是函数返回后的结果,注意-b -f或者-b -e要放在-x前面
5. -x 2表示上述4个信息显示2个层级,如json可以显示2层。
monitor命令
//作用 monitor命令可以监控一定时间范围内某个类的某个方法的整体执行情况,如成功多少次,失败多少次,平均rt值 //命令 monitor -c 5 包名.类名 方法名 "#cost>1" //参数 1. -c 5表示统计周期为5秒,默认是120秒, 2. -b这个命令不要加,是在统计前计算,好像有问题。 3. #cost>1表示只统计耗时大于1ms的请求,这个条件表达式几个命令都可以用的
trace命令
//作用 trace命令可以监控方法的每一个步骤的执行时长,以及方法内的业务执行的顺序 //命令 终端1执行:trace -n 5 包名.类名 方法名1 '#cost > 1' --skipJDKMethod false 终端2执行:trace -n 5 包名.类名 方法名2 --listenerId 1 //访问一次接口即可查看耗时 //参数 1. 监控执行时长超过1ms的方法每个具体步骤的执行时长 2. n=5表示执行5次后退出。 3. 默认jdk的方法 即java.*下的方法都不会打印,如果要完整打印,使用--skipJDKMethod false 4. 方法名2表示方法1中调用的方法 5. --listenerId 1 监听方法中指定方法在终端1中会显示监听id实现级联
操作步骤:
1. 打开终端1运行arthas,监控第一层方法 会返回一个listenerId:1 2. 调用接口可以查看监控的方法具体的内部方法耗时 3. 打开终端2运行arthas,查看终端1运行的端口对应的进程输入数字 一般为1,进入上次运行的arthas进程 4. 在终端2输入监控的第二次命令 监控第二层方法 尾部跟上 --listernerId 1 5. 调用接口可以在终端1继续查看第一层及第二层方法内部方法的具体耗时 以此类推
thread命令
//作用 thread命令可以查看当前CPU较高的线程 //命令 thread -n 3 -i 1000 //参数 1. 查看最近1000ms内CPU最高的3个线程
退出arthas
quit 退出本次连接,但宿主jvm内仍运行着arthas-server,只是退出了arthas-client
stop 退出arthas-server,并恢复增强过的类