Arthas常用命令
Arthas常用命令
安装
- 安装
curl -O https://arthas.aliyun.com/arthas-boot.jar- 启动
java -jar arthas-boot.jar
常用命令
jad + 全类名 + 方法名(可选),反编译代码
jad com.bsj.studentcard.location.service.impl.WeatherServiceImplwatch+全类名+方法名,监听返回值
watch com.bsj.studentcard.location.config.forest.ForestWeatherServiceImpl getWeather -bf -x 2参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 函数名表达式匹配 express 观察表达式,默认值: {params, target, returnObj}condition-express 条件表达式 [b] 在函数调用之前观察 [e] 在函数异常之后观察 [s] 在函数返回之后观察 [f] 在函数结束之后(正常返回和异常返回)观察 f=e+s [E] 开启正则表达式匹配,默认为通配符匹配 [x:] 指定输出结果的属性遍历深度,默认为 1,最大值是 4 stack +全类名+方法名,输出当前方法调用栈,确定该方法是被谁调用的
stack com.bsj.studentcard.location.service.impl.WeatherServiceImpl getWeather在线更新代码
将代码反编译到某个目录
jad --source-only com.bsj.studentcard.location.service.impl.WeatherServiceImpl > /tmp/WeatherServiceImpl.javavim修改代码后通过mc命令编译为class文件
mc -d /tmp/output /tmp/WeatherServiceImpl.java通过retransform命令加载class文件到JVM内存
retransform /tmp/output/com/bsj/studentcard/location/service/impl/WeatherServiceImpl.class
ps:
如果不清除掉所有的 retransform entry,并重新触发 retransform ,则 arthas stop 时,retransform 过的类仍然生效。重启服务则失效
retransform使用
retransform /tmp/output/com/bsj/studentcard/location/service/impl/WeatherServiceImpl.class加载指定类到JVM- retransform -l 查看retransform entry
- retransform -d 1 删除指定retransform entry,1是entry的编号
- retransform –deleteAll 删除所有retransform entry
上传 .class 文件到服务器的技巧
使用
mc命令来编译jad的反编译的代码有可能失败。可以在本地修改代码,编译好后再上传到服务器上。有的服务器不允许直接上传文件,可以使用base64命令来绕过。在本地先转换
.class文件为 base64,再保存为 result.txt1
base64 < Test.class > result.txt到服务器上,新建并编辑
result.txt,复制本地的内容,粘贴再保存把服务器上的
result.txt还原为.class1
base64 -d < result.txt > Test.class用 md5 命令计算哈希值,校验是否一致
查看JVM内存对象
查看内存对象
vmtool --action getInstances --className java.lang.String --limit 10'强制GC
vmtool --action forceGc
线程
thread
参数名称 参数说明 id 线程 id [n:] 指定最忙的前 N 个线程并打印堆栈 [b] 找出当前阻塞其他线程的线程 [i <value>]指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200 [–all] 显示所有匹配的线程
1 | |
日志
1 | |
logger信息输出如下:

1 | |
Profiler
1 | |