用阿里的Arthas做Java內存診斷,真香

點擊上方藍字關注我們!


作者:jitwxs

https://jitwxs.cn/a64edcb1.html

前言

早就聽聞阿里開源的 Arthas 在做 Java 應用診斷上十分牛逼,身邊也有很多同事在使用,因此決定開一個坑,自己從零學習下這個工具的使用,本系列使用的版本是當前最新版 3.4.5。

由於 Arthas 經過這麼長時間的發展,本身文檔、在線教程已經十分健全了,同時還有第三方的 IDEA 插件、許多教學視頻去幫助我們入門使用,因此這個系列的文章定位是個人筆記,而並非教程,希望不要誤人子弟。


概述

https://arthas.aliyun.com

當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

  • 這個類從哪個 jar 包加載的?爲什麼會報各種類相關的 Exception?

  • 我改的代碼爲什麼沒有執行到?難道是我沒 commit?分支搞錯了?

  • 遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?

  • 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!

  • 是否有一個全局視角來查看系統的運行狀況?

  • 有什麼辦法可以監控到JVM的實時運行狀態?

  • 怎麼快速定位應用的熱點,生成火焰圖?

使用 Arthas 需要 JDK 版本在 1.6 以上。

圖片


快速安裝

https://arthas.aliyun.com/doc/install-detail.html

Arthas 本身也是個 Java 進程,得益於 Java 跨平臺特性,所以我就直接在 Windows 上安裝了。

(1)下載 Arthas 包

curl -O https://arthas.aliyun.com/arthas-boot.jar  

(2)運行 Arthas

java -jar arthas-boot.jar  

需要注意的是運行 Arthas 前至少保證系統正在運行一個 Java 進程,否則無法啓動,並會報錯:Can not find java process. Try to pass in command line.Please select an available pid。解決辦法就是跑一個 Java 應用即可。

如果需要卸載 Arthas 的話:

在 Linux/Unix/Mac 平臺,刪除下面文件:

rm -rf ~/.arthas/  
rm -rf ~/logs/arthas  

Windows平臺直接刪除user home下面的.arthas和logs/arthas目錄

快速入門


4.1 attach 進程


這裏我們使用 Arthas 官方提供的 demo 包,這樣我們就不需要自己編寫代碼了。將 demo 包下載下來並運行。

curl -O https://arthas.aliyun.com/arthas-demo.jar  
java -jar arthas-demo.jar  

這個 demo 功能是死循環做質因數分解,並記錄下無法分解的次數,如下圖所示。

圖片

我們首先啓動 Arthas 並 attach 上該進程。

圖片

默認情況下,Arthas只listen 127.0.0.1,所以如果想從遠程連接,則可以使用 --target-ip參數指定 listen 的IP

另外如果條件允許的話,在 attach 後也可以使用瀏覽器登錄,訪問:http://127.0.0.1:3658 即可。也可以填入 IP,遠程連接其他機器的 Arthas。


4.2 常用命令

4.2.1 dashboard

https://arthas.aliyun.com/doc/dashboard.html

使用 dastboard 命令可以查看 Java 進程信息(定時刷新),如需退出使用 q 即可。它由如下四個部分組成:

  • 第一部分是顯示JVM中運行的所有線程:所在線程組,優先級,線程的狀態,CPU的佔用率,是否是後臺進程等

  • 第二部分顯示的JVM內存的使用情況

  • 第三部分顯示的是 GC 相關的信息

  • 第四部分是操作系統的一些信息和Java版本號

圖片

4.2.2 thread

https://arthas.aliyun.com/doc/thread.html

使用 thread 命令可以查看當前所有的線程信息。

並且可以通過追加 PID 的方式,查看具體某個線程的狀態。


4.2.3 jad

https://arthas.aliyun.com/doc/jad.html

使用 jad 命令可以反編譯 class 文件。

圖片

4.2.2 watch

https://arthas.aliyun.com/doc/watch.html

watch 命令可以監控方法的入參出參:

圖片


退出 Arthas

如果只是退出當前的連接,可以用quit或者exit命令。Attach到目標進程上的 Arthas 還會繼續運行,端口會保持開放,下次連接時可以直接連接上。

如果想完全退出arthas,可以執行stop命令。


   
   
   

ClickHouse在趣頭條中的實戰PPT


面試官:請你講講Redis官方提供的高可用方案?


能畫一張圖說說Spring Boot的核心架構嗎?


本文分享自微信公衆號 - 俠夢的開發筆記(xmdevnote)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

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