文章目录
- 下载并启动arthas
- 1 JVM相关命令
- 1.1 dashboard实时数据面板
- 1.2 thread查询线程信息
- 1.3 jvm查询当前jvm信息
- 1.4 vmoption调整VM诊断参数
- 1.5 logger查看与修改日志信息
- 1.6 heapdump堆快照
- 1.7 vmtool查询内存对象(方便排查大对象)
- 1.8 getstatic查看类的静态属性
- 2 class文件相关命令(代码热更新)
- 2.1 jad反编译指定类的源码
- 2.2 查找加载的 ClassLoader
- 2.3 mc生成字节码文件
- 2.4 retransform加载字节码文件
- 2.5 sc/sm查看已加载的类和方法信息
- 3 字节码增强相关命令
- 3.1 monitor监控方法执行
- 3.2 watch方法执行数据观测
- 3.2.1 当异常时打印参数与堆栈信息
- 3.2.2 按照耗时进行过滤
- 3.3 trace统计方法的调用链路
- 3.4 stack指定方法触发的路径
- 3.5 tt记录每次方法调用现场(很强大)
- 3.6 profiler生成火焰图
官方文档链接:https://arthas.aliyun/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查询线程信息
- thread: 查看当前线程信息,没有堆栈;
- thread id: 展示指定线程的堆栈信息;
- thread -n 3: 展示最忙的前三个线程并打印堆栈信息;
- thread -b: 找出synchronized关键字阻塞住的线程;
1.3 jvm查询当前jvm信息
其中线程相关信息:
1.4 vmoption调整VM诊断参数
vmoption:查看所有VM相关参数状态;
vmoption PrintGCDetails true: 修改VM指定参数;
其中需要关注的参数如下:
- HeapDumpBeforeFullGC:实现FullGC前dump;
- HeapDumpAfterFullGC:实现FullGC后dump;
- HeapDumpOnOutOfMemoryError:内存溢出时dump;
- HeapDumpPath:dump文件路径,必须是存在的路径;
- PrintGCDetails:打印GC日志,包含堆内存各区域使用情况;
- 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记录每次方法调用现场(很强大)
- 记录指定类下某些满足条件方法的调用现场:
tt -t -n 5 *AuctionFeeProcessor * '#cost>=1'
- 查看当前的调用记录:
tt -l
- 检索想要的记录:
tt -s 'method.name=="calTradeAndDeliverFee"'
- 查看某个记录的调用信息,包括传参与返回结果:
tt -i 1195
- 重新发起调用
tt -i 1195 -p
3.6 profiler生成火焰图
启动(参数可以不加): profiler start --duration 300 --include '*/b2b/*' --exclude '*apollo*'
查看状态:profiler status
停止:profiler stop
恢复采样:profiler resume
更多推荐
arthas常用命令整理
发布评论