歡迎光臨
每天分享高質量文章

Java開發必須掌握的線上問題排查命令

來自:Hollis(微信號:hollischuang)
作為一個合格的開發人員,不僅要能寫得一手還代碼,還有一項很重要的技能就是排查問題。這裡提到的排查問題不僅僅是在coding的過程中debug等,還包括的就是線上問題的排查。由於在生產環境中,一般沒辦法debug(其實有些問題,debug也白扯。。。),所以我們需要借助一些常用命令來查看運行時的具體情況,這些運行時信息包括但不限於運行日誌、異常堆棧、堆使用情況、GC情況、JVM引數情況、執行緒情況等。

給一個系統定位問題的時候,知識、經驗是關鍵,資料是依據,工具是運用知識處理資料的手段。為了便於我們排查和解決問題,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、資料庫、運維等。

赞(0)

分享創造快樂