java heap dump maken.

  Software

We kregen het verzoek om van een springboot applicatie een heapdump te maken. dit kan het op een aantal manieren doen, wij hebben voor de volgende 2 opties gekozen. jcmd en jmap. jcmd. Beide commado’s zitten bij redhat in het devel packages dus als je die er niet op hebt staan is dat stap 1.

zowel jcmd als jmap dien je op te starten onder de zelfde user als waar je jvm onder draait anders. omdat in ons geval de user op nologin stond maken  we gebruik van sudo. 

# sudo -u spring jcmd <PID> GC.heap_dump <dump_file>

# sudo -u spring jcmd 109146 GC.heap_dump /tmp/dump-core-auth.hprof

met jcmd kunnen nog veel meer zaken uitgevoerd worden wil je weten wat check de help functie van jcmd

# sudo -u spring jcmd <PID> help

# sudo -u spring jcmd 109146 help

ook kan je jmap gebruiken voor een heapdump ook ga je op de snelle manier te werk dan gebruik je de volgende opties. en wederom moet je deze uitvoeren als user

# sudo -u spring jmap -dump:format=b,file=/tmp/dump-core-auth.bin 66225

je kan met jmap ook een dump forceren als root dan moet je de -F optie gebruiken. nadeel van deze optie dat het maken op deze manier wel veel langer duurt.
voordeel van deze methode is stel je java proces hangt. je ook met de -F nog steeds een dump kan forceren.

# jmap -F -dump:format=b,file=/tmp/dump-core-auth2.bin 66225

alles is getest op rhel7 met openjdk 1.8