arthas 使用教程
Arthas 是Alibaba开源的Java诊断工具,通过这个工具我们可以快速并准确的定位问题。
这里会简单介绍arthas的学习大纲,以及简单的使用与demo,详细深入的操作命令参数请自行查阅官方文档学习。
官方文档: https://arthas.aliyun.com/doc/index.html
资源监控
arthas提供了CPU,内存,运行环境等资源信息面板,并且可以设置刷新时间
命令
dashboard
heapdump
dump java heap, 类似jmap命令的heap dump功能。
查看java 堆内存的对象实例情况heapdump /arthas-output/nap.hprof
将堆的使用情况dump到 /arthas-output/nap.hprof 文件
可以使用jdk自带的 VisualVM
来查看
也可以使用IntelliJ IDEA 自带的 HPROF 内存查看器 查看 输入Action Open profiler Snapshot
Profiler
arthas支持监控一段时间的火焰图来统计性能热点。profiler start
启动搜集CPU的使用情况profiler stop
从start 到 stop这个时间段的CPU火焰图
火焰图里,X轴越长,代表使用的越多,Y轴是调用堆栈信息 。当前收集的是什么类型的数据,比如cpu 那么x轴长度越大,占用的cpu资源就越多。
thread
查看当前线程信息,查看线程的堆栈
参数名称 | 参数说明 |
---|---|
id | 线程id |
[n:] | 指定最忙的前N个线程并打印堆栈 |
[b] | 找出当前阻塞其他线程的线程 |
[i ``] | 指定cpu使用率统计的采样间隔,单位为毫秒,默认值为200 |
[--all] | 显示所有匹配的线程 |
查看当前最吃资源的线程
方法调用时间追踪
命令
trace
使用trace命令可以针对某一类的某一方法进行方法调用时间的追踪,精确定位到问题所在。
使用建议:
首先使用thread命令查看当前高占用线程堆栈定位到方法
然后使用trace监控方法进行用时追踪
在线热更新
jad/mc/retransform 组合可实现热更新
jad
反编译代码,将已加载的字节码文件反编译到容器内文件夹。现场操作人员可以直接修复问题(如果问题够简单)jad --source-only net.skycloud.cmdb.resource.api.rest.ResourceSearchController > /tmp/ResourceSearchController.java
修改反编译出来的class文件 (除法分母不能为0)
mc
Memory Compiler/内存编译器,编译 .java
文件生成.class
。 这也是我们可以从 外部加载java文件(打补丁) 的基础。
若前方技术支持无法解决,可以让后端伙伴进行bug修复,然后传输修复后的java文件来以解燃眉之急。不需要重新生成镜像。
mc /tmp/ResourceSearchController.java -d /tmp
retransform
加载外部的 .class
文件,retransform(重新转换) jvm已加载的类。
retransform /tmp/net/skycloud/cmdb/resource/api/rest/ResourceSearchController.class
查看已更新的类
retransform -l
恢复原来的类
这两个命令一起执行
retransform --deleteAll
retransform --classPattern net.skycloud.cmdb.resource.api.rest.ResourceSearchController
JVM技术帖👍
6