线上问题定位之一——arthas

arthas

入门

  • yum install java-1.8.0-openjdk
  • 1、安装jdk 如果系统环境中已经安装过不用重复安装
  • curl -O https://alibaba.github.io/arthas/arthas-boot.jar
  • 2、安装arthas-boot.jar文件
  • java -jar arthas-boot.jar --target-ip 127.0.0.1
  • /home/admin/jdk1.8.0_65/bin/java -jar arthas-boot.jar --telnet-port 9999
  • 3、启动arthas
  • 启动成功后会打印运行中的java进程
  • 选择一个序号按回车
  • dashboard 可以实时查看Thread,Memory,os的信息
  • jad + 全路径名可以查看对象的反编译信息
  • thread 可以列出所有线程信息
  • watch + 全路径名 + 方法名 + returnObj查看返回返回值
  • jad命令反编译,然后可以用其它编译器,比如vim来修改源码
  • mc命令来内存编译修改过的代码
  • 用redefine命令加载新的字节码
  • /home/admin/jdk1.8.0_65/bin/java -jar arthas-client.jar 127.0.0.1 9999 -c “stop”
  • 4、退出arthas

watch

  • watch io.terminus.taurus.server.manager.RoleQueryManager checkIfExisted “{params,returnObj}” -x 10

trace

  • trace com.morningglory.mvc.service.item.ItemServiceImpl unsafeBuy

tt 方法执行的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

  • tt -t com.morningglory.mvc.controller.StudentController listByName 记录下当前方法的每次调用环境现场
  • tt -s ‘method.name==“listByName”’ 筛选出 listByName 方法的调用信息
  • tt -l 查看记录列表
  • tt -i 对于具体一个时间片的信息而言,你可以通过 -i 参数后边跟着对应的 INDEX 编号查看到他的详细信息
  • tt -i [INDEX] -p 重新发起调用

sc 查看jvm加载的类信息

  • sc com.morningglory.* 模糊搜索
  • sc -d com.morningglory.mvc.service.item.ItemServiceImpl 打印类的详细信息

sm “Search-Method” 的简写,查看已经加载了 Class 信息的方法信息

  • sm com.morningglory.mvc.service.item.ItemService
  • sm -d com.morningglory.mvc.service.item.ItemService add

jad 反编译指定已加载类的源码

  • jad com.morningglory.mvc.service.item.ItemServiceImpl
  • jad --source-only com.morningglory.mvc.service.item.ItemServiceImpl E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIBdc0687de 反编译时只显示源代码
  • jad com.morningglory.mvc.service.item.ItemServiceImpl E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIBdc0687de add 反编译指定的方法

stack 输出当前方法被调用的调用路径

  • stack com.morningglory.mvc.controller.StudentController listByName ‘params[0] == “te”’ 查看listByName方法第一个参数是te的调用链路

logger

  • logger 查看系统log配置
  • logger --name ROOT --level debug 更新log日志级别

vmoption 查看,更新VM诊断相关的参数

  • vmoption 查看所有option
  • vmoption PrintGCDetails 查看指定option
  • vmoption PrintGCDetails true 更新指定的option

线上代码增加日志

  • 反编译线上代码,并在需要出增加日志
  • 编译修改后的代码
  • 重新加载指定的class文件
  1. jad --source-only com.morningglory.mvc.controller.ItemController > /Users/nsh/Desktop/com/morningglory/mvc/controller/ItemController.java
  2. mc /Users/nsh/Desktop/com/morningglory/mvc/controller/ItemController.java -d /Users/nsh/Desktop
  3. redefine /Users/nsh/Desktop/com/morningglory/mvc/controller/ItemController.class
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西贝爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值