259 votes

Comment obtenir un vidage des threads et du tas d'un processus Java sous Windows qui n'est pas exécuté dans une console ?

J'ai une application Java que je lance à partir d'une console qui, à son tour, exécute un autre processus Java. Je veux obtenir un vidage de thread/heap de ce processus enfant.

Sous Unix, je pouvais faire un kill -3 <pid> mais sous Windows, la seule façon d'obtenir un vidage de fil est de faire Ctrl-Break dans la console. Mais cela ne me donne que le vidage du processus parent, pas du processus enfant.

Y a-t-il un autre moyen d'obtenir ce vidage de tas ?

18voto

atulsm Points 462

Si vous êtes sur server-jre 8 et plus, vous pouvez utiliser ceci :

jcmd PID GC.heap_dump /tmp/dump

17voto

Ravindra babu Points 5571

Essayez l'une des options ci-dessous.

  1. Pour les JVM 32 bits :

    jmap -dump:format=b,file=<heap_dump_filename> <pid>
  2. Pour JVM 64 bits (citation explicite) :

    jmap -J-d64 -dump:format=b,file=<heap_dump_filename> <pid>
  3. Pour une JVM 64 bits avec l'algorithme G1GC dans les paramètres de la VM (Seul le tas d'objets vivants est généré avec l'algorithme G1GC) :

    jmap -J-d64 -dump:live,format=b,file=<heap_dump_filename> <pid>

Question relative à la SE : Erreur de vidage du tas de Java avec la commande jmap : EOF prématuré

Jetez un coup d'œil aux différentes options de jmap à ce article

15voto

Daniel Winterstein Points 1019

Si vous voulez un heapdump en cas de perte de mémoire, vous pouvez lancer Java avec l'option -XX:-HeapDumpOnOutOfMemoryError

c.f. Page de référence sur les options JVM

10voto

krosenvold Points 35979

Vous pouvez envoyer le kill -3 <pid> de Cygwin. Vous devez utiliser le programme Cygwin ps pour trouver les processus Windows et envoyer le signal à ce processus.

9voto

Steve Kuo Points 15196

Tu pourrais courir jconsole (inclus dans le SDK de Java 6) puis connectez-vous à votre application Java. Il vous montrera chaque Thread en cours d'exécution et sa trace de pile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X