Aller au contenu principal
Comment effectuer un dump de threads

1. Introduction

Un dump de threads est une vue à un instant T de tous les threads d'un processus Java. L'état de chaque thread est présenté avec une trace de pile montrant le contenu de la pile du thread.

Comme le dump affiche l'activité des différents threads, il est utile pour effectuer diagnostiquer les problèmes tels que les pics de CPU, les blocages de processus, des problèmes de performances, des problèmes de mémoire ou…

,

2.1. jstack

jstack est un outil du JDK qui permet de capture les threads d'un processus Java. Il prend comme paramètre l'identifiant du processus et retourne le résultat de la capture dans la console.

jstack [-F] [-l] [-m] <pid>

Toutes les options sont facultatives :
  • L'option -F force la capture des threads. Cette option est pratique à utiliser lorsque la capture ne s'effectue pas en raison du blocage…
,

2.2. jcmd

L'outil jcmd a été introduit avec la version 7 du JDK Oracle. Il est très utile pour diagnostiquer des problèmes avec des applications JVM.

Il offre différentes fonctionnalités telles que l'identification des identifiants des processus Java, la capture de threads, l'obtention des statistiques des collections Garbage, ...

Pour effectuer une capture de threads, utilisez la commande suivante :

jcmd…
,

2.3. Autres outils

Le JDK comprend d'autres outils capables de capturer les threads d'un processus Java, tels que Java Mission Control, jvisualvm, jconsole.

,

3. A partir de la ligne de commande

3.1. Commande kill (Linux / Unix)

Le moyen le plus simple pour effectuer une capture de threads dans un environnement Linux / Unix est d'utiliser la commande kill. Nous utiliserons cette commande pour envoyer un signal au processus utilisant l'appel système kill(). Dans notre cas, nous enverrons le signal -3.

kill -3 <pid>

En recevant ce signal, le processus Java…