Vous confondez deux vidages java différents. kill -3
génère un vidage de thread, pas un vidage de tas.
Dump de thread = traces de pile pour chaque thread de la sortie JVM vers stdout en tant que texte.
Heap dump = contenu de la mémoire pour la sortie du processus JVM dans un fichier binaire.
Pour effectuer un vidage de thread sous Windows, CTRL+ BREAKsi votre JVM est au premier plan, le processus est le plus simple. Si vous avez un shell de type Unix sur Windows comme Cygwin ou MobaXterm, vous pouvez l'utiliser kill -3 {pid}
comme vous pouvez le faire sous Unix.
Pour effectuer un vidage de threads sous Unix, CTRL+ Csi votre JVM est le processus de premier plan ou kill -3 {pid}
fonctionnera tant que vous obtenez le bon PID pour la JVM.
Avec l'une ou l'autre plate-forme, Java est fourni avec plusieurs utilitaires qui peuvent vous aider. Pour les vidages de fil, jstack {pid}
c'est votre meilleur pari. http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
Juste pour terminer la question du vidage: les vidages de tas ne sont pas couramment utilisés car ils sont difficiles à interpréter. Mais, ils contiennent beaucoup d'informations utiles si vous savez où / comment les regarder. L'utilisation la plus courante consiste à localiser les fuites de mémoire. Il est -D
recommandé de définir le sur la ligne de commande java afin que le vidage de segment soit généré automatiquement lors d'une OutOfMemoryError, -XX:+HeapDumpOnOutOfMemoryError
mais vous pouvez également déclencher manuellement un vidage de segment . La manière la plus courante consiste à utiliser l'utilitaire java jmap
.
REMARQUE: cet utilitaire n'est pas disponible sur toutes les plateformes. Depuis JDK 1.6, jmap
est disponible sur Windows.
Un exemple de ligne de commande ressemblerait à quelque chose
jmap -dump:file=myheap.bin {pid of the JVM}
La sortie "myheap.bin" n'est pas lisible par l'homme (pour la plupart d'entre nous), et vous aurez besoin d'un outil pour l'analyser. Ma préférence est MAT. http://www.eclipse.org/mat/