1, 設置OOM時dump heap:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/logs
2, 設置打印GC信息:
-XX:+PrintGCDetails -Xloggc:/opt/tomcat/logs/gc.log
3, 查看java進程:
jps -v // -v表示輸出jvm啓動時的參數
4, 線上dump heap,用到了jmp命令:
jmap -dump:format=b,file=7680.hprof 7680 //7680爲java進程ID
5, 查看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
6, 獲取java進程的線程狀態:
jstack -l 7680 > 7680.stack
7, 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總耗時(秒)。
8, 查看最近一次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條。
9, 查看默認垃圾收集器:
java -XX:PrintCommandLineFlags -version