Categories
Eclipse Java

Identifier le deadlock d’une application Java

lockLe wiki Eclipse détaille très clairement la procédure pour obtenir un dump de la JVM au moment précis où celle-ci semble soit complétement bloquée, soit tombée dans un mode dans lequel un thread s’est emballé et occupe 100% du CPU…

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.