jvm性能分析和故障解決工具

我們寫的java程序需要在jvm上運行,可能出現內存泄漏,死循環,內存溢出,死循環,死鎖,當發生這些事情的時候,我們就需要藉助jdk的工具。

 

jdk的bin目錄下有很多工具

例如

javac.exe 編輯java文件的

java.exe 來執行.class文件的

javap.exe 是反編譯.class文件的

jar.exe是用來打jar包的

 

將jdk的lib下的tools.jar 解壓,然後在sun/tools下可以看到與bin目錄下的工具名稱一樣的目錄,這裏面放的就是上面工具的源碼,編譯之後就可以運行了

我們jdk8學習這些命令

jps的作用

常見的命令參數有:

jps -v

jstat 命令

jstat -gc

如果不指定 間隔和次數,默認只會打印一次

 

 

jstat -class

jstat -compiler

 

gc命令的詳細分析

jstat -gc

01064341885 酒仙橋電話
S0C S1C 表示的是:堆內存中倖存區域的大小
S0U S1U 表示的是:堆內存中倖存區的使用大小
EC 表示的是:伊甸園區的內存大小
EU 表示的是:伊甸園區的使用內存
OC 表示的是:老年代的容量
OU 表示的是:老年代的使用狀態

(其中MC和MU 在jdk1.8中使用,即對於方法區的方案用的是:元空間,在jdk1.7中叫做永久代的大小)
MC 表示的是:元空間的大小
MU 表示的是:元空間的使用大小
CCSC 表示的是:類壓縮空間的容量
CCSU 表示的是:類壓縮空間使用的大小
YGC 表示的是: young gc的次數
YGCT 表示的是: young gc 用的時間

FGC:表示的是:Full gc 的次數
FGCT: 表示的是:Full gc 用的時間

GCT 表示的是: 所有gc用的時間

 

main方法中執行到數組第三次垃圾回收

jmp命令:

jmap -heap pid

分析:

jhat命令

 

點開:

jstack命令:

jstack -F pid

jstack -l

寫一個死循環代碼,我們藉助process explorer來查看cpu的使用情況

我們看到對應的Threads中6160(對應的十六進制是:1810) 的佔用cpu佔用的比較高:

我們根據進程id即java.exe 的進程id,利用 jstack -l 命令來查看該進程的所有線程信息,我們找到線程id是1810

下面是獲取外部資源(例如需要輸入,即卡頓長時間沒有響應)利用jstack來進行分析

利用jstack來演示死鎖:

可視化工具jconsole:

在terminal 中直接輸入jconsole 就可以看到圖形化界面了

虛擬機的配置信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章