本篇文章是自学B站“御风大世界”视频的提炼和总结。
原视频见:Arthas使用教程
alibaba出品线上JVM监控诊断利器
1、是一个全局JVM运行时监控工具,实现了 CPU,线程,内存,堆栈信息等监控。
2、CPU飙高,可以快速定位是什么原因造成的。
3、接口没反应、卡住了,定位是不是死锁。
4、CTO说你们这个接口太慢了,要优化一下,可以准确找出耗时的代码。
5、我写的代码没有执行,是部署的分支不对,还是我压根没提交?
6、线上有一个低级错误,改起来很简单,能不能在不重启应用的情况下, 进行类替换, 热部署。
1.arthas 如何安装?
Arthas下载地址
比如我们下载到F盘,共享或者发送给linux
2.arthas 启动
启动前先运行Java程序,我们写了一个死循环
运行程序
@Testpublic void test2() throws InterruptedException {while (true) {Thread.sleep(1000);System.out.println(123);}}
JVM配置如下:
-Xms10m -Xmx10m
图示如下:
注意:这里不一定非要启动main方法,只需要打开IDEA即可。
之后在arthas下载路径输入cmd,之后输入如下命令:建议模拟服务器环境用Linux进行如下的所有操作
java -jar arthas-boot.jar
这里我们输入1,会下载Arthas,这里注意1是打不开的,会报连接失败,因为IDEA占用了那个端口,所以我们选择3
通过help指令可以看到操作方式
dashboard 命令展示
输入
dashboard -h
如图,会列举其用法
输入指令,
解决问题1:实现了 CPU,线程,内存,堆栈信息等监控。
dashboard
输入指令
thread
查看某个具体的线程
thread 线程ID
指令:查看反编译当前类,查看内容
jad 类名
IDEA中下载插件arthas idea
想对某个方法进行Arthas的调用,可以右键选择,watch
这时候,命令到了剪切板之中,去命令行中右键粘贴即可。
回车后就可以抓到了
trace是对耗时的分析
会深入到方法内部,方法比较慢会标红高亮
stack是调用栈
可以看条件分支
monitor是对方法级别的监控
做压测的时候观测
首先用命令
dashboard
查看空间使用情况,发现noheap内存和元空间占用率很高
某个线程的CPU使用率达到了90%多
进阶着使用命令,找出CPU利用率高的前5个线程
thread -n 5
定位到死循环的类
查看死锁的方式
thread
定位到2个死锁
使用指令
thread -b
时空隧道功能:重放请求
tt -t 全类名 方法名
使用指令
tt -i 索引
可以查看某个索引的请求
我们通过如下指令复现请求
tt -i 索引 -p
热力图:
profiler start
过一会儿
profiler stop
访问路径会看到一个热力图
官网文档
github用户案例