K8S容器POD内存快照导出分析处理方案
1. 获取K8S容器POD内存快照
# 进入k8s pod
kubectl exec -it POD_NAME -n POD_NAMESPACE -- /bin/sh# 获取java进程PID
ps -ef | grep java# 生成堆快照
jmap -dump:live,format=b,file=test_app_heap.hprof PID# 查看堆概要
jmap -heap PID# 统计前10个内存消耗对象
jmap -histo:live PID | head -n 10# 复制pod堆快照文件到宿主机
kubectl cp POD_NAMESPACE/POD_NAME:/example_pod/test_app_heap.hprof test_app_heap.hprof
2. 分析工具
2.1 VisualVM
-
JDK 自带的图形化工具(建议从官网下载最新版以兼容更多功能)。
-
操作步骤:
① 打开VisualVM → 点击 File > Load → 选择堆转储文件(如.hprof
);
② 在 "Heap Dump" 标签页查看整体内存分布(对象数量、占用大小);
③ 切换到 "Objects" 视图 → 按占用空间排序(Size降序);
④ 选中可疑对象 → 右键 "Show in GC Root Path" → 追踪其GC引用链,定位持有大内存的对象及其引用源。
2.2 Memory Analyzer (MAT)
-
Eclipse基金会开发的深度内存分析工具(推荐处理大型堆转储)。
-
支持检测内存泄漏(如通过 Leak Suspects Report 自动生成泄漏报告);
-
提供对象依赖树(Dominator Tree)视图,识别内存瓶颈的关键对象。