Overview#
This document will demonstrate how to generate a memory dump so that you can analyze your memory usage.
Services supported#
This operation can be made in the following Java-based services:
Service | JAVA_OPTIONS environment variable |
---|---|
auth-server | CN_AUTH_JAVA_OPTIONS |
casa | CN_CASA_JAVA_OPTIONS |
config-api | CN_CONFIG_API_JAVA_OPTIONS |
fido2 | CN_FIDO2_JAVA_OPTIONS |
link | CN_LINK_JAVA_OPTIONS |
saml | CN_SAML_JAVA_OPTIONS |
scim | CN_SCIM_JAVA_OPTIONS |
Steps#
Let's go through the steps needed to generate a dump in config-api
:
-
Increase the pod's memory request and limit to something larger than the default.
-
Edit the config-api deployment and modify the JAVA_OPTIONS:
env: - name: CN_CONFIG_API_JAVA_OPTIONS value: -XX:MaxDirectMemorySize=400m -Xmx150m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:MaxRAMPercentage=0
-
Modify the
command
key in the deployment to add the following:command: - /bin/sh - -c - | /app/scripts/entrypoint.sh & sleep 900000000
-
You can view the heap usage using the following command:
kubectl exec -n <namespace> pod-name -- jcmd 7 GC.heap_info
-
Now once the process meets its limit, the process should shut down without the pod getting an OOM, allowing you to get the dump from within the pod.
-
Copy the generated dump from the pod:
kubectl cp -n <namespace> pod-name:tmp/java_pid7.hprof java_pid7.hprof
Last update:
2024-09-27
Created: 2024-06-04
Created: 2024-06-04