前言
當(dāng)遇到 JAVA 線上問題時,如 CPU 飆升、負(fù)載突高、內(nèi)存溢出等問題,你需要查命令,查網(wǎng)絡(luò),然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。而除了這些,Arthas 是一款命令行交互模式的 Java 診斷工具,由于是 Java 編寫,所以可以直接下載相應(yīng) 的 jar 包運(yùn)行,它是Java 線上問題定位處理的終極利器。
當(dāng)你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
- 這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception?
- 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了?
- 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎?
- 線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)!
- 是否有一個全局視角來查看系統(tǒng)的運(yùn)行狀況?
- 有什么辦法可以監(jiān)控到JVM的實(shí)時運(yùn)行狀態(tài)?
- 怎么快速定位應(yīng)用的熱點(diǎn),生成火焰圖?
- 怎樣直接從JVM內(nèi)查找某個類的實(shí)例?
安裝方式
官方安裝方式參考:Arthas下載:
https://arthas.aliyun.com/doc/download.html#id2
上傳至服務(wù)器,解壓到某個文件文件夾(我這里文件夾叫arthas)
切換到解壓文件夾,啟動Arthas
使用命令:java -jar arthas-boot.jar啟動,啟動過程中會讓你選擇監(jiān)控哪個項(xiàng)目,輸入序號即可
啟動成功后,可使用官方提供的命令查看內(nèi)存、線程相關(guān)信息
官方命令文檔:
https://arthas.aliyun.com/doc/commands.html
常用命令
dashboard命令 可以看到,這里會顯示出線程(按照cpu占用百分比倒排)、內(nèi)存(堆空間實(shí)時情況)、GC情況等數(shù)據(jù)。可以按Ctrl+C或者q退出
thread命令查看所有線程信息,同時會列出每個線程的 CPU 使用率,可以看到圖里 ID 為12 的線程 CPU 使用率
thread 33命令 查看 CPU 消耗較高的 12 號線程信息,可以看到 CPU 使用較高的方法和行數(shù)
thread -n 10命令查看CPU占用率前10的線程的堆棧信息
thread -b命令查看目前block線程
thread -n 5 -i 5000命令查看5s內(nèi)的CPU使用率top 5線程棧
trace 包名+類名 方法名命令查看方法調(diào)用耗時
stop命令關(guān)閉Arthas服務(wù)端
quit命令退出Arthas客戶端
常保存日志
將命令的結(jié)果完整保存在日志文件中,便于后續(xù)進(jìn)行分析,默認(rèn)情況下,該功能是關(guān)閉的,如果需要開啟,請執(zhí)行以下命令: