在生產環境中,有時候會遇到Java應用程序因發生OOM而導致服務掛掉的情況,可以通過dump文件來分析jvm信息。
1、獲取JVM的dump文件的兩種方式
1.1 JVM啟動時增加兩個參數
#出現 OOME 時生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError #生成堆文件地址: -XX:HeapDumpPath=/opt/jvmlogs/
1.2 通過指令直接生成當前JVM的dump文件
jmap -dump:format=b,file=/tmp/heap.jmap JAVA_PID
說明:在pod里執行,需要先進入到pod查看Java進程的PID,然后執行該指令,然后把dump文件復制到本地
kubectl exec -it ps -ef jmap kubectl cp
第一種方式是事后方式,需要等待當前JVM出現問題后才能生成dump文件,實時性不高,
第二種方式在執行時,JVM是暫停服務的,所以對線上的運行會產生影響,所以建議第一種方式。
2. 查看JVM信息
2.1 查看整個JVM內存狀態
jmap -heap [pid]
2.2 查看JVM堆中對象詳細占用情況
jmap -histo [pid]
參考博客 https://www.cnblogs.com/ainimore/p/13345831.html