一.retransform命令
可以对已有的类,进行修改后重新加载,并且立即生效
1. 反编译对应的类
jad --source-only com.xc.service.Impl.UserServiceImpl > /tmp/UserServiceImpl.java
2.编辑对应的tmp目录下的类,改动代码
3.查找要修改类的classLoaderHash值
sc -d *UserServiceImpl | grep classLoaderHash
4.编译修改后的类的成class文件
mc -c classLoaderHash值 /tmp/UserServiceImpl.java -d /tmp
mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserServiceImpl.java -d /tmp
上面四个步骤在实际使用中基本上没用,因为依赖的问题,会在编译成class文件的时候报错,可以本地idea修改后编译,在服务器建立好对应的包路径文件夹,复制class文件到文件夹内
5.加载修改后的类
retransform /tmp/com/xc/service/Impl/UserServiceImpl.class
6.查看修改过的类
retransform -l
7.回滚为原来的类
①先删除
指定id删除
retransform -d id
全部删除
retransform --deleteAll
②显示触发
retransform --classPattern com.xc.service.Impl.UserServiceImpl
二. tt命令打印日志
查看getCommonIcon方法的入参和返回参数
tt -t *UserServiceImpl queryAppletInfo
如果方法并发特别大,可以指定记录的次数,-n 3代表记录3次,3次之后自动退出该命令
tt -t *UserServiceImpl queryAppletInfo -n 3
如果想查询指定参数,第一个参数值为数值1的
tt -t *UserServiceImpl queryAppletInfo params[0]==1 -n 3
如果入参是对象的
tt -t *UserServiceImpl queryAppletInfo params[0].id==1 -n 3
字符串类型
tt -t *UserServiceImpl queryAppletInfo "params[0].name=='xc'.toString()" -n 3
查看具体的返回参数和入参
首先用tt -l 查看刚才记录过的请求,然后找到自己想看的请求的index
tt -i 1000 查看详情.
三.dashboard当前系统的实时面板
可以展示JVM内的所有运行的线程,并且会展示JVM堆内存的详情信息
四.thread命令查看jvm线程的堆栈信息
thread -i 线程id
展示在指定时间内最忙的几个线程 1000ms内3个最忙的
thread -n 3 -i 1000
其他命令可查看arthas文档: Arthas 用户文档 — Arthas 3.6.1 文档