watch
函数执行数据观测: location 会有三种值
AtEnter,AtExit,AtExceptionExit。
对应函数入口,函数正常 return,函数抛出异常。
result 表示观察表达式的值: {params,returnObj,throwExp}
eg: 查看是某个方法的参数,返回值,异常信息
watch com.test.service.TedRecordServiceImpl existError
'{params,returnObj,throwExp}' -n 5 -x 3
trace
方法内部调用路径,并输出方法路径上的每个节点上耗时。排查耗时多的方法进行优化
eg: 打印列表组织树的调用路径
trace com.test.te.service.impl.TedRecordServiceImpl getHistoryRecord -n 5
--skipJDKMethod false
jad
命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码
sc
查看 JVM 已加载的类信息
mc
编译.java文件生成.class
redefine
加载外部的.class文件,redefine jvm 已加载的类。
通常 jad、sc、 mc、 redefine 四个命令会一起结合使用,
操作步骤:
#将class 反编译成java文件
jad --source-only com.dongbao.per.service.impl.org.PerOrgsServiceImpl >
/data/temp/PerOrgsServiceImpl.java
#获取class 的 类加载器的 hash值,
sc -d com.dongbao.per.service.impl.org.PerOrgsServiceImpl | grep
classLoaderHash
#修改文件之后,使用mc命令, 将java文件编译成class,可以通过-c参数指定 classloader, -d 指定
#输出目录。
mc -c classloader /data/temp/PerOrgsServiceImpl.java -d /data/temp/
#热加载class
redefine -c classloader /data/temp/PerOrgsServiceImpl.class