记一次Arthas的使用,特别适合线上定位问题

需要看官方文档的请移步:       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 &

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值