Java開發(fā)必須掌握的線上問題排查命令(轉(zhuǎn))

Java開發(fā)必須掌握的線上問題排查命令(轉(zhuǎn))

標(biāo)簽(空格分隔): java


作者信息: HollisChuang
原文鏈接:http://www.hollischuang.com/archives/1561

遇到好的總結(jié)文章能轉(zhuǎn)則不寫,當(dāng)然自己還要多實(shí)踐,不然仍然是別人的知識.


作為一個合格的開發(fā)人員,不僅要能寫得一手還代碼,還有一項很重要的技能就是排查問題。這里提到的排查問題不僅僅是在coding的過程中debug等,還包括的就是線上問題的排查。由于在生產(chǎn)環(huán)境中,一般沒辦法debug(其實(shí)有些問題,debug也白扯。。。),所以我們需要借助一些常用命令來查看運(yùn)行時的具體情況,這些運(yùn)行時信息包括但不限于運(yùn)行日志、異常堆棧、堆使用情況、GC情況、JVM參數(shù)情況、線程情況等。

給一個系統(tǒng)定位問題的時候,知識、經(jīng)驗(yàn)是關(guān)鍵,數(shù)據(jù)是依據(jù),工具是運(yùn)用知識處理數(shù)據(jù)的手段。為了便于我們排查和解決問題,Sun公司為我們提供了一些常用命令。這些命令一般都是jdk/lib/tools.jar中類庫的一層薄包裝。隨著JVM的安裝一起被安裝到機(jī)器中,在bin目錄中。下面就來認(rèn)識一下這些命令以及具體使用方式。文中涉及到的所有命令的詳細(xì)信息可以參考 Java命令學(xué)習(xí)系列文章

1.jps

功能

顯示當(dāng)前所有java進(jìn)程pid的命令。

常用指令

jps:顯示當(dāng)前用戶的所有java進(jìn)程的PID

jps -v :顯示虛擬機(jī)參數(shù)

jps -m :顯示傳遞給main()函數(shù)的參數(shù)

jps -l :顯示主類的全路徑

詳細(xì)介紹

2.jinfo

功能

實(shí)時查看和調(diào)整虛擬機(jī)參數(shù),可以顯示未被顯示指定的參數(shù)的默認(rèn)值(jps -v 則不能)。

Java8中不支持該命令

常用指令

jinfo -flag CMSIniniatingOccupancyFration 1444:查詢CMSIniniatingOccupancyFration參數(shù)值

詳細(xì)介紹

3.jstat

功能

顯示進(jìn)程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運(yùn)行數(shù)據(jù)。

常用指令

jstat -gc 3331 250 20 :查詢進(jìn)程2764的垃圾收集情況,每250毫秒查詢一次,一共查詢20次。

jstat -gccause:額外輸出上次GC原因

jstat -calss:件事類裝載、類卸載、總空間以及所消耗的時間

詳細(xì)介紹

4.jmap

功能

生成堆轉(zhuǎn)儲快照(heapdump)

常用指令

jmap -heap 3331:查看java 堆(heap)使用情況

jmap -histo 3331:查看堆內(nèi)存(histogram)中的對象數(shù)量及大小

jmap -histo:live 3331:JVM會先觸發(fā)gc,然后再統(tǒng)計信息

jmap -dump:format=b,file=heapDump 3331:將內(nèi)存使用的詳細(xì)情況輸出到文件,之后一般使用其他工具進(jìn)行分析。

詳細(xì)介紹

5.jhat

功能

一般與jmap搭配使用,用來分析jmap生成的堆轉(zhuǎn)儲文件。

由于有很多可視化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)可以替代,所以很少用。不過在沒有可視化工具的機(jī)器上也是可用的。

常用指令

jmap -dump:format=b,file=heapDump 3331 + jhat heapDump:解析Java堆轉(zhuǎn)儲文件,并啟動一個 web server

詳細(xì)介紹

6.jstack

功能

生成當(dāng)前時刻的線程快照。

常用指令

jstack 3331:查看線程情況

jstack -F 3331:正常輸出不被響應(yīng)時,使用該指令

jstack -l 3331:除堆棧外,顯示關(guān)于鎖的附件信息

詳細(xì)介紹

7.常見問題定位過程

頻繁GC問題或內(nèi)存溢出問題

一、使用jps查看線程ID

二、使用jstat -gc 3331 250 20 查看gc情況,一般比較關(guān)注PERM區(qū)的情況,查看GC的增長情況。

三、使用jstat -gccause:額外輸出上次GC原因

四、使用jmap -dump:format=b,file=heapDump 3331生成堆轉(zhuǎn)儲文件

五、使用jhat或者可視化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情況。

六、結(jié)合代碼解決內(nèi)存溢出或泄露問題。

死鎖問題

一、使用jps查看線程ID

二、使用jstack 3331:查看線程情況

8.結(jié)語

經(jīng)常使用適當(dāng)?shù)奶摂M機(jī)監(jiān)控和分析工具可以加快我們分析數(shù)據(jù)、定位解決問題的速度,但也要知道,工具永遠(yuǎn)都是知識技能的一層包裝,沒有什么工具是包治百病的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容