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

问题描述

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

解决方法

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

  2. 创建Java堆转储

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

示例:

jmap -dump:live,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 插件。
  • 打开堆转储文件

Open the heap dump file

  • 选择泄漏可疑报告

select leak suspects report

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...