1. 程式人生 > >JVM常用命令行工具學習總結

JVM常用命令行工具學習總結

數量 class tac 對象 tails jmp mpp 無法 leak

1. 搞清楚兩個概念:

內存溢出(Out Of Memory):是指程序在申請內存時,沒有足夠的內存空間供其使用,就會出現out of memory。

內存泄露(Memory Leak):是指程序在申請內存後,無法釋放已申請的內存空間。

2. 設置OOM時dump heap:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/logs

3. 設置打印GC信息:

-XX:+PrintGCDetails -Xloggc:/opt/tomcat/logs/gc.log

4. 查看java進程:

jps -v // -v表示輸出jvm啟動時的參數

5. 線上dump heanp,用到了jmp命令:

jmap -dump:format=b,file=7680.hprof 7680 //7680為java進程ID

6. 查看java進程實例對象數量以及大小,也是jmap:

jmap -histo 7680

輸出示例如下:

num #instances #bytes class name

1: 1732667 149468304 [C

2: 209826 136432064 [B

3: 364780 53321016 com.zws.beans.User

Total: 9076919 717049952

7. 獲取java進程的線程狀態:

jstack -l 7680 > 7680.stack

8. jstat查看Java進程各個內存區域的使用占比情況:

jstat -gcutil 7680

示例輸出:

S0 S1 E O P YGC YGCT FGC FGCT GCT

75.02 0.00 3.34 41.42 99.92 388 15.379 0 0.000 15.379

其中:

S0 S1:Survivor0,Survivor1空間占百分比。

E:Eden空間使用所占百分比。

O:老年代空間使用所占百分比。

P:永久代空間使用所占百分比。

YGC:自從進程啟動以來發生的Minor GC次數(YGC表示Young GC)。

YGCT:自從進程啟動以來發生的Minor GC總耗時(秒)。

FGC:自從進程啟動以來發生的Full GC次數。

FGCT:自從進程啟動以來發生的Full GC總耗時(秒)。

GCT:自從進程啟動以來所有GC總耗時(秒)。

9. 查看最近一次GC的原因:

jstat -gccause 4882

示例輸出:

S0 S1 E O P YGC YGCT FGC FGCT GCT LGGC GCC

75.02 0.00 3.34 41.42 99.92 388 15.379 0 0.000 15.379 Allocation Failure No GC

其中:

LGGC:最近一次GC的原因。

其他同第8條。

JVM常用命令行工具學習總結