Le "thread dump" est assez rapide à générer, il s'agit de la liste des threads de la VM avec leur état et la trace en cours d’exécution. Il est généralement utile d'en générer plusieurs à quelques dizaines de secondes d’intervalle lorsque l'on cherche à diagnostiquer un problème.

Le format du thread-dump peut différer en fonction de la méthode d'obtention.

Methode console :
L'utilitaire "jstack" se trouve dans le répertoire "/bin" de votre JDK.
Utilisez une (Lien en accès restreint) .

jstack -l [PID_DU_PROCESS_JAVA] > [FILENAME.tdump]

Si le processus ne répond pas vous pouvez essayer :

jstack -F -l [PID_DU_PROCESS_JAVA] > [FILENAME.tdump]

(attention à ne pas employer l'option -m sauf cas précis où vous en avez besoin)

En exécutant cette commande plusieurs fois, les thread-dumps se cumulent dans le même fichier et l'évolution des threads pourra facilement être analysée.

Sur Windows, si vous avez un message d'erreur : "Insufficient memory or insufficient privileges to attach" ou "Not enough storage is available to process this command". Vous pouvez utiliser la commande psexec pour exécuter jstack avec le system account (option -s):

psexec -s "%JAVA_HOME%\bin\jstack.exe" PID > stack.txt 

Méthode graphique (préférée) :
Si vous pouvez vous connecter avec jvivualvm la génération du "thread dump" peut se faire directement par le menu contextuel :

jvisualvm-thread-dump

il est souvent intéressant d'en réaliser 2 à quelques dizaines de secondes d’intervalle pour permettre d'analyser l'évolution des threads.