Arthas技巧
基础命令
- dashboard
- -i 实时数据的时间间隔,默认5000ms,
- -n 刷新实时数据的次数
1
dashboard -i 5000 -n 20
- thread
- -n 指定最忙的前N个线程并打印堆栈
- -b 找出当前线程阻塞其他线程的线程
1 |
|
jvm(查看jvm参数)
sysprop(当前jvm的系统属性)
sysenv(当前jvm的环境属性)
vmoption(查看,更新jvm诊断相关的参数)
perfcounter(查看当前jvm的Perf Counter信息)
logger(查看该进程下的logger相关信息)
- 更新日志级别
1
logger -n kl --level debug
- 更新日志级别
mbean
getstatic(查看类的静态属性,支持ognl表达式)
ognl(https://commons.apache.org/proper/commons-ognl/language-guide.html)
1
2
3
4
5ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'
@ArrayList[
@String[/opt/java/8.0.181-zulu/jre],
@String[OpenJDK Runtime Environment],
]sc(查看已加载的类信息)
- -d 输出当前类的详细信息
- -f 输出当前类的成员变量信息
1 |
|
- sm(查看已加载类的方法信息)
- -d 展示每个方法的详细信息
1 |
|
- dump(已加载的bytecode 到指定目录)
- heapdump(类似于jmap的heap dump功能)
- vmtool(采用JVMTI接口查看内存对象,强制GC)
- JVMTI接口(https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html)
- –action 后接需要指定的命令
- getInstances (-x/–expand)
1 |
|
jad(反编译指定已加载类的源码)
classloader(查看类加载信息)
- –load 使用类加载去加载类信息
- -t 查看继承树
- -c 查看URLClassloader实际的urls
mc (编译.java 文件生成.class)
retransform/redefine(加载外部的.class文件,retransform/redefine jvm已加载的类)
- 不允许新增加field/method
- 正在跑的函数,没有退出不能生效。
1 |
|
monitor(方法执行监控)
- -c 统计周期,默认值为120秒
watch(函数执行数据观测)
- -b 函数调用之前观察
- -f 函数调用之后观察
- -s 函数返回之后观察
- -e 函数异常之后观察
- -x 函数深度
trace(方法内部调用路径,并输出方法路径上的每个节点上耗时)渲染和统计整个调用链路上的所有性能开销和追踪调用链路
- -n 次数
- –skipJDKMethod false default true
- ‘#cost > 10’展示耗时大于10ms的调用路径,有利于排查问题
1 |
|
- stack(输出当前方法被调用的调用路径),使用方法通trace
- tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调进行观测,timetunnel)
- -t 记录方法每次的指定情况
- -n 3 当你执行一个调用量不高的方法可能你还能有足够的时间用ctrl C 中断,如果遇到调用量非常大的方法,瞬间就把你的JVM内存撑爆。
- -l 查看时空隧道,检索调用记录
- -i index 编号 查看详细信息
- -p 重做一次调用
1 |
|
- profiler 支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集的采样结果生成火焰图
1 |
|
- base64
- tee
- auth
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!