配置 jvm 参数,内存溢出时会自动HeapDump(指定 dump 文件路径是可选的)
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home
或者用 jmap
jmap -dump:format=b,file=<filename.hprof> <pid>
必要时将dump文件从容器中拷贝到物理机
# docker cp <container_name>:<container_path> <local_path>
docker cp 4d09feaf6483:/home/java_pid8.hprof /work
# kubectl cp default/POD_NAME:bin/FILE_NAME /Users/username/FILE_NAME
kubectl cp default/docker-sample-799db6c8d7-mqwww:/home/java_pid8.hprof /home/K8S/java_pid8.hprof
MAT(Memory Analyzer Tool) 定位堆内存溢出问题
下载安装 MAT(Memory Analyzer Tool),这个软件是 eclipse 基金会搞的。
打开 MAT -> File -> Open Heap Dump -> 选择对应 .hprof 文件
点击查看 leak suspects
(泄露嫌疑人),分析内存泄露
点击这个 Problem Suspect1
的 Details
,在 Shortest Paths To the Accumulation Point
(到达累积点的最短路径)点击 java.lang.Object[360145]
,选择 L