Si vous n’avez pas de jdk dans vos containers Docker, vous ne pourrez pas directement faire de heap dump de la JVM. Par exemple, si vos containers sont basés sur Alpine, avec un jre OpenJdk. Il n’y a pas les outils nécessaires.
Exemple pour faire un heap dump. Les commandes sont à effectuer depuis la machine hôte.
# Installer un OpenJdk pour pouvoir lancer le dump
docker exec -ti container-name apk add \
--no-cache openjdk8
# Lister les process java du container,
# et mémoriser celui de l'application, ici c'est le 22
docker exec -ti container-name jps
# Créer un heap dump
# à la fin de la commande, remplacer 22 par le bon pid
# le dump se fait ici à la racine /
docker exec -ti container-name jmap \
-dump:live,format=b,file=/heapDump.hprof 22
# Copier le dump,
# du container vers la machine hôte
docker cp container-name:/heapDump.hprof ./