如何从 Kubernetes k8s pod 获取堆转储?

Amr*_*rle 5 java memory-leaks heap-dump kubernetes kubernetes-pod

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

Amr*_*rle 9

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

  2. 创建 Java 堆转储

jmap -dump:live,format=b,file=<file_name>.bin <process_id>
Run Code Online (Sandbox Code Playgroud)

例子:

jmap -dump:live,format=b,file=application_heap_dump.bin 1
Run Code Online (Sandbox Code Playgroud)
  1. 将堆转储从 pod 复制到本地机器。
kubectl cp <pod_name>:<heap_file> <your local destination directory>
Run Code Online (Sandbox Code Playgroud)

例子:

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

打开堆转储文件

  • 选择泄漏嫌疑人报告

选择泄漏嫌疑人报告

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