首页 > 解决方案 > 如何从 Kubernetes k8s pod 获取堆转储?

问题描述

请提供一个简单的分步指南,以从 Kubernetes pod 中查看 Java 堆转储。

标签: javakubernetesmemory-leakskubernetes-podheap-dump

解决方案


  1. 登录到 K8S 并执行到运行您的 Java 应用程序的 Pod。
kubectl exec -it herle-deployment-pod-5757d89d85-wrpc9 bash
  1. 获取进程 ID(top 命令)

  2. 创建java堆转储

jmap -dump:live,format=b,file=<file_name>.bin <process_id>

例子:

jmap -dump:live,format=b,file=application_heap_dump.bin 1
  1. 将堆转储从 pod 复制到本地计算机。
kubectl cp <pod_name>:<heap_file> <your local destination directory>

例子:

kubectl cp herle-deployment-pod-5757d89d85-wrpc9:/tmp/application_heap_dump.bin /Users/amritharajherle/Desktop/application_heap_dump.bin
  1. 使用任何内存泄漏分析工具。我正在使用 Eclipse 的Memory Analyzer插件。
  • 打开堆转储文件

打开堆转储文件

  • 选择泄漏嫌疑人报告

选择泄漏嫌疑人报告

  • 您可以检查对象的数量和保留的堆空间。还有一些可能的泄漏嫌疑人。

推荐阅读