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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章