线上诊断工具arthas使用

网站

https://arthas.aliyun.com/doc/quick-start.html

下载

网络通:curl -O https://arthas.aliyun.com/math-game.jar
网络不通:https://arthas.aliyun.com/download/latest_version?mirror=aliyun

部署

1、将下载的压缩包放入openjdk11linux64.1/bin/文件夹中,
2、通过unzip arthas-bin.zip 解压到当前文件夹
3、cd 到 openjdk11linux64.1/bin 文件夹
4、netstat -tunlp | grep “8123” (通过该命令查找端口对应的进程号)
5、./java -jar arthas-boot.jar 12521 (12521 是第四步查出的端口号对应进程号)
6、至此完成arthas的部署工作
在这里插入图片描述
7、退出客户端使用stop命令,退出当前连接使用quit或exit,中断执行使用ctrl+C。

dashboard 查看进程信息

在这里插入图片描述

jvm参数

COUNT: JVM 当前活跃的线程数
DAEMON-COUNT: JVM 当前活跃的守护线程数
PEAK-COUNT: 从 JVM 启动开始曾经活着的最大线程数
STARTED-COUNT: 从 JVM 启动开始总共启动过的线程次数
DEADLOCK-COUNT: JVM 当前死锁的线程数

menory命令

内存占用情况
在这里插入图片描述

TRACE命令

在这里插入图片描述
主要用于统计方法耗时
基本格式:
trace 包名.类名 方法名

统计最耗时的方法(*任意匹配)
trace 包名.类名 *

只展示耗时大于10ms的调用
trace 启动类 run ‘#const > 10’

trace次数限制
trace 启动类 run -n 5

trace多个类或者方法(-E开启正则,|进行多个类或者方法分割)
trace -E 全限定类名1|全限定类名2 方法名1|方法名2

sc jad mc redefine(推荐retransform)在线修改代码

以在代码中加入一段日志打印为例:
1、使用sc命令查看指定类的加载信息:主要记录类的classLoaderHash值:
sc -d 全限定类名
在这里插入图片描述
2、使用jad进行反编译,到指定目录
jad --source 全限定类名 > 指定目录
在这里插入图片描述
3、修改代码
进入指纹目录生成的反编译文件,修改代码,录入加入一句日志打印
在这里插入图片描述
4、使用mc内存编译器编译代码,-c指定类的hash值(之前sc -d记录的hash值),-d是编译文件的输出目录
sc -c hash值 全限定类名 -d 指定编译结果输出目录
在这里插入图片描述
5、使用refedine重新加载编译后的class文件
在这里插入图片描述
6、触发代码,查看结果
在这里插入图片描述

注意:

1、reset对redefine无效,如果想重置需要使用redefine加载原始的字节码文件
2、使用jad、wathc、trace、monitor、tt等命令后,redefine之后的修改会失效,推荐使用retransform,改命令不会失效
3、使用mc编辑jad的反编译代码可能失败,可以本地编译好后上传加载
4、redefine限制:
①不运行新增字段、方法
②正在拍的方法,没有退出不能生效

retransform 加载class文件

与redefine的区别是,该命令不会被其他命令重置失效
格式:retransform class文件路径

查看所有加载的class:
格式:retransform -l
在这里插入图片描述删除指定加载的class(1就是id):
格式:retransform -d 1
删除所有的加载的class:
格式:retransform --deteleAll

消除retransForm影响:

1、删除加载的class:retransform -d -1
2、重新加载原始的class:retransform 原始class的文件位置(原始jar包解压后class位置)

monitor方法执行监控

格式:monitor -c 5 全限定类名 方法名(5s统计周期统计一次,默认120s)

在这里插入图片描述
条件过滤:第二个参数为false才记录
格式:monitor -c 5 全限定类名 方法名 “params[1] == false”
在这里插入图片描述
条件过滤:第一个参数为字符"f2a87d4e41564641a756108936062af6"时记录(字符串需要转义)
格式:monitor -c 5 全限定类名 方法名 "params[0] == “f2a87d4e41564641a756108936062af6"”
在这里插入图片描述

tt 查看方法调用情况

格式:(-t记录调用情况,-n 3只记录3次,方式jvm爆掉。'params[0] instanceof String’第一个参数是String类型,params.length==1方法的参数个数是1)
tt -t -n 3 权限的类名 方法名 ‘params[0] instanceof String’
在这里插入图片描述格式:tt -i 1010(查看详细调用情况,1010是前一步记录的id号)
在这里插入图片描述
格式:tt -i 1010 -p(重新触发调用)
在这里插入图片描述

wathc命令

方便观察指定方法的调用情况
格式:
watch 全限定类名 方法名 -x 2 -b -s -n 3
(-x 2深度为2,-b方法执行前观察,-s方法执行后观察,-n 3观察3次)
在这里插入图片描述
条件观察
格式:watch 全限定类名 方法名 -x 2 -b -s -n 3 “{params[0],target}” “params[0] != null”
在这里插入图片描述

异常观察
格式:watch 全限定类名 方法名 “{params[0],throwExp}” “params[0] != null” -e
在这里插入图片描述
耗时过滤
格式:watch 全限定类名 方法名 “{params,returnObj}” “#cost>200”(观察耗时超过200ms的处理)

sysenv 查看环境变量

在这里插入图片描述

基础命令

清屏 cls
查看历史命令 history
当前会话信息 session

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值