Pour faire court, si vous avez un JDK 1.6 ou supérieur, il ne vous faudra que quelques secondes pour obtenir un état de la pile, puisqu’il suffit d’exécuter :
- jps, afin d’obtenir le PID de la JVM qui vous intéresse
- jstack <pid>, pour obtenir le dump sur la sortie standard
Avec une version de JDK plus ancienne, il faut avoir lancé la JVM (de Sun…) avec l’option -Dcom.sun.management.jmxremote. Cela permet de s’y connecter par la suite avec l’outil jconsole. Bien qu’assez peu contraignante, cette pratique a tout de même l’inconvénient d’obliger à savoir à l’avance que l’application va tomber dans un deadlock, ce qui n’est pas toujours le cas… 😉
Si vous êtes sous Linux, vous avez gagné puisque quelle que soit votre version de Java, un kill -3 <pid_JVM> fonctionnera à coup sûr !
Le wiki détaille d’autres procédures, et notamment comment s’y prendre si l’on veut obtenir le dump d’une application à distance.