arthas常用命令整理


官方文档链接:https://arthas.aliyun.com/doc/index.html

下载并启动arthas

curl -O https://alibaba.github.io/arthas/arthas-boot.jar

java -jar arthas-boot.jar

1 JVM相关命令

1.1 dashboard实时数据面板

dashboard:查看当前系统实时数据面板

dashboard -i 5000 -n 5 // -i指刷新时间间隔,-n指刷新次数

面板信息标注:
在这里插入图片描述

1.2 thread查询线程信息

  1. thread: 查看当前线程信息,没有堆栈;
  2. thread id: 展示指定线程的堆栈信息;
  3. thread -n 3: 展示最忙的前三个线程并打印堆栈信息;
  4. thread -b: 找出synchronized关键字阻塞住的线程;

1.3 jvm查询当前jvm信息

其中线程相关信息:
在这里插入图片描述

1.4 vmoption调整VM诊断参数

vmoption:查看所有VM相关参数状态;
vmoption PrintGCDetails true: 修改VM指定参数;
其中需要关注的参数如下:

  1. HeapDumpBeforeFullGC:实现FullGC前dump;
  2. HeapDumpAfterFullGC:实现FullGC后dump;
  3. HeapDumpOnOutOfMemoryError:内存溢出时dump;
  4. HeapDumpPath:dump文件路径,必须是存在的路径;
  5. PrintGCDetails:打印GC日志,包含堆内存各区域使用情况;
  6. PrintGCDateStamps: 输出GC的时间戳;

注意:开启打印GC日志时必须是已经配置了loggc路径,不然不生效

1.5 logger查看与修改日志信息

logger -n FLOW_INFO_LOG -level debug // FLOW_INFO_LOG日志级别改为debug

1.6 heapdump堆快照

heapdump --live /tmp/dump.hprof // 只打印存活对象

1.7 vmtool查询内存对象(方便排查大对象)

vmtool --action getInstances --className *.PublishInfoLabelJob -x 2

1.8 getstatic查看类的静态属性

getstatic *.ConnectionPropertiesImpl PROPERTY_LIST

2 class文件相关命令(代码热更新)

2.1 jad反编译指定类的源码

jad --source-only com.bj58.che.yxp.buyerservice.utils.JacksonUtil > /tmp/JacksonUtil.java

注意:需要新建一个窗口,编辑反编译后的文件(arthas进程不支持vim命令)!

2.2 查找加载的 ClassLoader

sc -d *JacksonUtil | grep classLoaderHash

不指定加载器生成字节码时有时会报:cannot find symbol

2.3 mc生成字节码文件

mc -c 4e428222 /tmp/JacksonUtil.java -d /tmp

2.4 retransform加载字节码文件

retransform /tmp/com/bj58/che/yxp/buyerservice/utils/JacksonUtil.class

2.5 sc/sm查看已加载的类和方法信息

sc:查看所有已加载到的类,如果是接口还可以搜索所有实现类
sm:查找类的具体函数

sc javax.servlet.Filter
sc -d javax.servlet.Filter // -d可以打印出类加载具体信息
sc *StringUtils // 支持通配符
sm -d *.RoundingMode

3 字节码增强相关命令

3.1 monitor监控方法执行

monitor 类名 方法名:监控方法的调用结果。

monitor *JacksonUtil toJsonString -c 5 "param[0] != null"

在这里插入图片描述

3.2 watch方法执行数据观测

watch *JacksonUtil toJsonString '{params, returnObj, throwExp}' -x 2 
// 第一个参数是类名,第二个参数是函数名,都支持通配符,-x 2可以按指定层级展示结果

3.2.1 当异常时打印参数与堆栈信息

watch com.example.demo.arthas.user.UserController * "{params[0],throwExp}" -e

3.2.2 按照耗时进行过滤

watch com.example.demo.arthas.user.UserController * '{params, returnObj}' '#cost>200'

3.3 trace统计方法的调用链路

trace *AuctionFeeProcessor calDeliverFee

在这里插入图片描述

3.4 stack指定方法触发的路径

stack *AuctionFeeProcessor calDeliverFee

在这里插入图片描述

3.5 tt记录每次方法调用现场(很强大)

  1. 记录指定类下某些满足条件方法的调用现场:
tt -t -n 5 *AuctionFeeProcessor * '#cost>=1'

在这里插入图片描述

  1. 查看当前的调用记录:
tt -l 
  1. 检索想要的记录:
tt -s 'method.name=="calTradeAndDeliverFee"'
  1. 查看某个记录的调用信息,包括传参与返回结果:
tt -i 1195
  1. 重新发起调用
tt -i 1195 -p

3.6 profiler生成火焰图

启动(参数可以不加): profiler start --duration 300  --include '*/b2b/*' --exclude '*apollo*' 
查看状态:profiler status
停止:profiler stop
恢复采样:profiler resume
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值