Java系统性能监控工具Arthas的使用

Arthas工具有什么用具体百度。

安装:

打开iterm;输入: curl -O https://alibaba.github.io/arthas/arthas-boot.jar
在这里插入图片描述
出现类似这些的就是完成了。

启动:

直接:java -jar arthas-boot.jar
在这里插入图片描述
这样就是完成了,可以看到罗列了很多的进程出来,我们输入要监控的那个进程前面那个编号1,2,3,4就可以。

容易报错:

[ERROR] Target process 11685 is not the process using port 3658, you will connect to an unexpected process.
[ERROR] 1. Try to restart arthas-boot, select process 4363, shutdown it first with running the 'stop' command.
[ERROR] 2. Or try to use different telnet port, for example: java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

原因:上次执行arthas后,未执行shutdown进行关闭。导致了端口占用,按照它给的提示,重新随意指定一个端口号给它启动。

输入:java -jar arthas-boot.jar --telnet-port 9998 --http-port 9999

搞定,启动成功:

在这里插入图片描述
看见那个$符号,就是打开进入了监控客户端。可以使用quit(退出当前客户端)、stop\shutdown(关闭arthas服务端,并退出所有客户端)。除了在命令行查看外,还可以通过浏览器访问http://127.0.0.1:8563/查看。

浏览器输入:http://127.0.0.1:8563

在这里插入图片描述

输入:dashboard可以看仪表盘(如果这些数据看不懂什么作用,可以先看JVM)

在这里插入图片描述

关闭的时候记得stop,不然下次启动就会端口占用了

在这里插入图片描述

快速排错:

我先故意写个死循环

在这里插入图片描述

然后调用一下这个方法。再看回仪表盘。

在这里插入图片描述
可以看到仪表盘被线程ID为23的任务搞炸了CPU99%;
再康康内存使用情况~
在这里插入图片描述
可以看到,老年代已经被挤爆炸,奇怪的是那个nonheap非堆内存,也就是堆外内存,居然也很爆炸,为什么会这样呢?死循环创建对象,而对象不都是在堆上分配吗???

百思不得其解的我在网上看到一个解释:
非堆就是JVM留给 自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法 的代码都在非堆内存中。

emmmm~~~姑且相信这样解释吧,虽然对象是堆上分配,但是还有部分信息是在占用堆外内存的。如果有真正懂的可以留言告诉我一声不胜感激哦~

这么严重?于是,赶紧输入:

thread 23

去查看这条线程到底在干嘛,为什么这么爆炸。
在这里插入图片描述

直接找到对应的方法,原来是死循环,那就赶紧@到对应的开发者改~
对于这套简单的工具,还有很多其他好玩好用的方法,具体的可以看这个博客介绍得更详细:

https://blog.csdn.net/u013735734/article/details/102930307

官网的说明文档:https://alibaba.github.io/arthas/trace.html

猜你喜欢

转载自blog.csdn.net/whiteBearClimb/article/details/105814058