常见使用
热修改代码
wget https://github.com/hengyunabc/katacoda-scenarios/raw/master/demo-arthas-spring-boot.jar
#可以不后台运行,但是注意有可能需要sudo权限,不然网络权限不足
sudo java -jar demo-arthas-spring-boot.jar &
#进入arthas之后选择spring-boot
#jad --> mc --> redefine 三部曲, 第一个反编译Java文件,第二个修改后生产class,第三加载
#1.反编译输出jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
#2.搜索到对应类的classloadersc -d *UserController |grep classLoader
#3.修改后编译,传入正确的code,不可省mc -c classLoader /tmp/UserController.java -d /tmp
#4.重新热加载(无需重启服务),并且非侵入, 只是临时修改.redefine /tmp/com/example/demo/arthas/user/UserController.class有的时候可能反编译失败,那就只能手动上传了
定位报错
#1. watch确认为空的类,假设我修改了A类.但是不知道是哪个方法
# 一般观察方法的入参值,返回值,抛出异常三个常用参数就行了
watch xx.xx.A * '{params,returnObj,throwExp}' -x 2
#展开2层异常栈, 更具体常用3层. 你会发现打印的信息相当详细
#2. 一般watch就能秒杀500报错这种问题了,trace能帮我们把时间消耗用树形输出, 就会更清晰,而且会告诉你哪抛出了异常.
trace xx.xx.A * -j #不输出JDK方法,当然你可以不用*, 而是通过watch之后更小的范围.方法执行监控
monitor -c 5 demo.MathGame primeFactors-c 统计周期 默认120s
活用 ognl 表达式
假设某方法单位时间内的调用次数在增加,可以使用ognl查看变量的值(如set、list的值)
详情见 alibaba.github.io/arthas/inde…