需要看官方文档的请移步: https://alibaba.github.io/arthas/ 文档很详细很清晰
一、想看简化的使用步骤请继续下滑:
1.登录到后台服务器,创建arthas文件夹(mkdir arthas),cd进入该文件夹;
2.执行:wget https://alibaba.github.io/arthas/arthas-boot.jar,将会下载当前jar包;
3.执行:java -jar arthas-boot.jar,启动jar包;
4.选择当前项目进程号对应的序号即可进入命令输入步骤。
二、常用命令:
1.查看服务器某个类的源代码(jad 类路径 方法名):
jad cn.migu.caps.ext.service.impl.GetxxxImpl getxxxMethod
2.查看服务器某个类的某个方法的时延,可定位到该方法中的第一层子方法时延消耗(trace 类路径 方法名):
trace cn.migu.caps.ext.service.impl.GetxxxImpl getxxxMethod
3.查看服务器某个类的某个方法当前被谁调用了(stack 类路径 方法名):
stack cn.migu.caps.ext.service.impl.GetxxxImpl getxxxMethod
三、可能用到的命令整理目录
*1. wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
*2. curl -L https://alibaba.github.io/arthas/install.sh | sh
1. dashboard
2. 查看前3个忙碌线程 thread -n 3
3. thread -b, 找出当前阻塞其他线程的线程
4. sysprop 查看所有系统属性
5. 查看单个系统属性
sysprop java.version
6. 修改当个属性
sysprop user.country CN
7. ognl表达式
ognl '#value1=@System@getProperty("file.encoding")'
执行多个表达式复值给一个变量作为list
ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'
8. 查看mbean属性信息
mbean java.lang:type=Threading
9. 查看类加载信息
sc -d -f cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl
10. 查看类的字节码信息--可以得到类的hashcode
dump cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl
11. classloader 加载某个类
classloader cn.xxx.abc.system.service.impl.GetSystemSettingImpl
classloader -c 3d4eac69 --load demo.MathGame
12. mc 命令
mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
13. monitor 命令监控
monitor -c 5 cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl getSysConfig
14. watch 命令
watch cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl getSysConfig '{params, returnObj}' 'params[1].key == "memberFee_page_address"' -x 3
参数条件
watch com.bbb.bootdemo.utils.Test test4 "{params[0],returnObj,throwExp}" "params[0]<=4" -e -x 2
watch com.bbb.bootdemo.utils.Test test5 '{params,returnObj}' 'params[2] != "wang"' -x 3
接口调用时延条件
watch com.bbb.bootdemo.utils.Test test4 "{params,returnObj}" "#cost>200" -x 2
15. trace 命令
trace cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl getSysConfig
16. stack 命令
stack cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl getSysConfig
stack cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl getSysConfig '#cost>5'
17. tt命令(条件表达式也是用OGNL 来编写,核心的判断对象依然是 Advice 对象。除了 tt 命令之外,watch、trace、stack 命令也都支持条件表达式)
解决方法重载
tt -t *GetSysConfigImpl getSysConfig params.length==1
通过制定参数个数的形式解决不同的方法签名,如果参数个数一样,你还可以这样写
tt -t *GetSysConfigImpl getSysConfig 'params[1].key instanceof String'
解决指定参数
tt -t *GetSysConfigImpl getSysConfig params[1].key == "memberFee_page_address""
查看所有的监测数据
tt -l
查看指定条件的监测数据
tt -s 'method.name=="getSysConfig"'
查看index的调用信息
tt -i 1000
发起一次调用
tt -i 1000 -p
指定多少次调用
tt -i 1000 -p --replay-times 2
指定多少次调用,每次调用时间间隔
tt -i 1000 -p --replay-times 2 --replay-interval 2000
18. 管道命令
sm cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl * | grep 'getSysConfig'
19. 异步任务
后台执行
trace cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl getSysConfig &
查看异步任务/ 终止异步任务
jobs/ kill job-id
任务切换至前台
fg job-id
任务切换至后台
bg job-id
后台执行重定向
trace cn.xxx.abc.system.service.dsfimpl.GetSysConfigImpl getSysConfig >> tmt/arthas.log &