Amrith Raj Herle
Amrith Raj Herle

Reputation: 875

How to get a heap dump from Kubernetes k8s pod?

Please provide a simple step by step guide to looking into java heap dump from a Kubernetes pod.

Upvotes: 21

Views: 62057

Answers (2)

Kuppusamy
Kuppusamy

Reputation: 153

jmap is part of JDK not JRE. The production image are usually built on JRE and not JDK to reduce size of image. If you need to debug, you need to update the image to JDK based and debug then later once the issue is identified, can revert back to JRE based image.

In my case, I did the same thing to generate the dump.

Upvotes: 2

Amrith Raj Herle
Amrith Raj Herle

Reputation: 875

  1. Log in to the K8S and exec into the Pods where your java application is running.
kubectl exec -it herle-deployment-pod-5757d89d85-wrpc9 bash
  1. get the process id (top command)

  2. Create java heap dump

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

Example:

jmap -dump:live,format=b,file=application_heap_dump.bin 1
  1. Copy the heap dump from pod to your local machine.
kubectl cp <pod_name>:<heap_file> <your local destination directory>

Example:

kubectl cp herle-deployment-pod-5757d89d85-wrpc9:/tmp/application_heap_dump.bin /Users/amritharajherle/Desktop/application_heap_dump.bin
  1. Use any memory leak analysis tool. I'm using the Eclipse's Memory Analyzer plugin.
  • Open the heap dump file

Open the heap dump file

  • select leak suspect report

select leak suspects report

  • You can check the number of objects and retained heap space. Also some possible leak suspects.

Upvotes: 29

Related Questions