內存排查(三)-使用arthas工具


使用arthas工具

arthas是Alibaba開源的Java診斷工具。arthas可以幫助我們解決一下問題:

  1. 這個類從哪個 jar 包加載的?為什么會報各種類相關的 Exception?
  2. 我改的代碼為什么沒有執行到?難道是我沒 commit?分支搞錯了?
  3. 遇到問題無法在線上 debug,難道只能通過加日志再重新發布嗎?
  4. 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
  5. 是否有一個全局視角來查看系統的運行狀況?
  6. 有什么辦法可以監控到JVM的實時運行狀態?
  7. 怎么快速定位應用的熱點,生成火焰圖?

如果需要查看更多內容,請訪問arthas官網

監聽java進程

#監聽某個進程,需要手動指定序列號
java -jar arthas-boot.jar

#按名稱監聽某個進程
java -jar arthas-boot.jar --select com.Application

命令執行結果如下:

按名稱監聽某個進程

dashboard命令

使用dashborard命令可以動態查看查看java程序的線程信息,內存等信息。

#查看pid對應的進程信息
dashboard pid

命令執行結果如下:

dashboard

thread命令

使用thread命令可以查看線程的狀態,線程的棧信息。

#查看線程對應的棧信息
thread pid

命令執行結果如下:

thread命令

jad命令

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

#反編譯 class文件
jad classname

命令執行結果如下:

jad命令

monitor命令

使用monitor命令可以監控方法的成功和失敗執行次數,非實時返回。

#-c表達循環周期,這里指定的是5s
monitor -c 5 class method

monitor命令

trace命令

使用trace命令,可以查看方法內部的調用路徑和方法耗時,消耗時間最長的方法會用紅色標記。

trace class method 

#次數調用限制
trace class method run -n 1

#執行時間調用限制
trace class method run '#cost > 10'

trace命令

watch命令

使用watch命令可以查看方法執行時的入參,返回值,異常等信息,並且也可以選擇監聽的時機,如方法執行之前,方法執行之后。

#查看方法返回值
watch class method returnObj

#查看方法入參和返回值
watch class method "{params,returnObj}"

#查看異常時的方式信息
 watch class method "{params[0],throwExp}" -e

watch命令

heapdump命令

我們可以使用heapdump來導出java程序的堆dump信息,導出來的hprof可以使用jhat命令和jvisualvm工具查看。

heapdump filename.hprof

heapdum命令

異步任務

#查看正在運行的任務
jobs

#將后台任務轉為前台
fg 序號

#將前台任務轉為后台
bg 序號

#后台執行任務,使用&
trace class method &

異步任務

webConsole

默認地址為:http://127.0.0.1:3658/。

exit命令

使用exit命令,即可退出arthas。

jvm命令

使用jvm命令,查看當前 JVM 的信息

博主微信公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM