來自:Hollis(微訊號:hollischuang)
給一個系統定位問題的時候,知識、經驗是關鍵,資料是依據,工具是運用知識處理資料的手段。為了便於我們排查和解決問題,Sun公司為我們提供了一些常用命令。這些命令一般都是jdk/lib/tools.jar中類庫的一層薄包裝。隨著JVM的安裝一起被安裝到機器中,在bin目錄中。下麵就來認識一下這些命令以及具體使用方式。文中涉及到的所有命令的詳細資訊可以參考 Java命令學習系列文章
jps
功能
顯示當前所有java行程id的命令。
常用指令
jps
:顯示當前使用者的所有java行程的PID
jps -v 3331
:顯示虛擬機器引數
jps -m 3331
:顯示傳遞給main()函式的引數
jps -l 3331
:顯示主類的全路徑
詳細介紹
jinfo
功能
實時檢視和調整虛擬機器引數,可以顯示未被顯示指定的引數的預設值(jps -v 則不能
)。
jdk8中已經不支援該命令。
常用指令
jinfo -flag CMSIniniatingOccupancyFration 3331
:查詢CMSIniniatingOccupancyFration引數值
詳細介紹
jstat
功能
顯示行程中的類裝載、記憶體、垃圾收集、JIT編譯等執行資料。
常用指令
jstat -gc 3331 250 20
:查詢行程2764的垃圾收集情況,每250毫秒查詢一次,一共查詢20次。
jstat -gccause
:額外輸出上次GC原因
jstat -calss
:查詢類裝載、類解除安裝、總空間以及所消耗的時間
詳細介紹
jmap
功能
生成堆轉儲快照(heapdump)
常用指令
jmap -heap 3331
:檢視java 堆(heap)使用情況
jmap -histo 3331
:檢視堆記憶體(histogram)中的物件數量及大小
jmap -histo:live 3331
:JVM會先觸發gc,然後再統計資訊
jmap -dump:format=b,file=heapDump 3331
:將記憶體使用的詳細情況輸出到檔案,之後一般使用其他工具進行分析。
詳細介紹
jhat
功能
一般與jmap搭配使用,用來分析jmap生成的堆轉儲檔案。
由於有很多視覺化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)可以替代,所以很少用。不過在沒有視覺化工具的機器上也是可用的。
常用指令
jmap -dump:format=b,file=heapDump 3331
jhat heapDump
:解析Java堆轉儲檔案,並啟動一個 web server
詳細介紹
jstack
功能
生成當前時刻的執行緒快照。
常用指令
jstack 3331
:檢視執行緒情況
jstack -F 3331
:正常輸出不被響應時,使用該指令
jstack -l 3331
:除堆疊外,顯示關於鎖的附件資訊
詳細介紹
常見問題定位過程
頻繁GC問題或記憶體上限溢位問題
一、使用jps
檢視執行緒ID
二、使用jstat -gc 3331 250 20
檢視gc情況,一般比較關註PERM區的情況,檢視GC的增長情況。
三、使用jstat -gccause
:額外輸出上次GC原因
四、使用jmap -dump:format=b,file=heapDump 3331
生成堆轉儲檔案
五、使用jhat或者視覺化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情況。
六、結合程式碼解決記憶體上限溢位或洩露問題。
死鎖問題
一、使用jps
檢視執行緒ID
二、使用jstack 3331
:檢視執行緒情況
結語
經常使用適當的虛擬機器監控和分析工具可以加快我們分析資料、定位解決問題的速度,但也要知道,工具永遠都是知識技能的一層包裝,沒有什麼工具是包治百病的。
●本文編號619,以後想閱讀這篇文章直接輸入619即可
●輸入m獲取到文章目錄
Linux學習
更多推薦《18個技術類公眾微信》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。