Les vidages de threads peuvent nous aider à déterminer les pics du processeur, les blocs de blocage, les exceptions de mémoire, la réponse à l'application lente, le temps de réponse long et d'autres problèmes système. Certains outils d'analyse en ligne tels que http://fastthread.io/ peuvent également nous aider à analyser et à localiser les problèmes, mais ces outils nécessitent un fichier de vidage. Par conséquent, dans cet article, j'ai résumé les moyens de saisir des fichiers de threads Java en 7.
1. JSTACK
JSTACK est un outil de ligne de commande efficace pour ramper les fichiers de vidage de threads. Il est situé dans le dossier bin (JDK_HOME / BIN) dans le répertoire JDK. Ce qui suit est la commande pour ramper les fichiers de vidage:
JSTACK -L <PID>> <File-Path>
illustrer:
PID: L'ID de processus de l'application Java, c'est-à-dire l'ID de processus d'application qui doit explorer le fichier de vidage.
File-Path: le chemin pour enregistrer le fichier de vidage.
Exemple:
jstack -l 37320> /opt/tmp/threaddump.txt
L'exemple ci-dessus démontre l'utilisation de JSTACK pour générer des fichiers de vidage dans le répertoire /opt/tmp/threaddump.txt.
À partir de Java5, JStack a été inclus dans JDK. Si vous utilisez l'ancienne version de JDK, vous devriez envisager d'utiliser d'autres méthodes.
2. Kill -3
En termes de considérations de sécurité, certaines machines dans les environnements de production ne contiennent que des environnements JRE, de sorte que l'outil JSTACK ne peut pas être utilisé. Dans ce cas, nous pouvons utiliser Kill -3:
kill -3 <pid>
illustrer:
PID: L'ID de processus de l'application Java, c'est-à-dire l'ID de processus d'application qui doit explorer le fichier de vidage.
Exemple:
kill -3 37320
Lorsque vous utilisez Kill -3 pour générer des fichiers de vidage, les fichiers de vidage sont sortis dans le flux d'erreur standard. Si votre application s'exécute sur Tomcat, le contenu de vidage sera envoyé au fichier <omcat_home> /logs/catalina.out.
3. Jvisualvm
Java VisualVM est un outil d'interface graphique qui peut fournir des informations JVM. Il est situé dans le fichier jdk_home / bin / jvisualvm.exe. En commençant par JDK6 Update7, il est inclus dans le JDK.
Exécutez JVisualVM et dans le panneau de gauche (comme indiqué dans la figure ci-dessous), les informations JVM en cours sont répertoriées. Cet outil peut saisir des fichiers de vidage à partir de JVM en cours d'exécution locale ou à distance.
Cliquez sur le bouton de vidage du thread correspondant au nom de processus de la figure ci-dessus pour générer un fichier de vidage, comme indiqué dans la figure ci-dessous:
4. JMC
Java Mission Control (JMC) est un outil qui peut collecter et analyser les données d'un environnement local ou de production. En commençant par Oracle JDK 7 Update 40, il est inclus dans le JDK, qui peut générer des fichiers de vidage à partir du JVM. JMC est situé dans le fichier JDK_HOME / BIN / JMC.EXE:
Après avoir exécuté l'outil, vous pouvez voir le processus Java s'exécuter localement, qui peut également être connecté à une machine distante. Double-cliquez sur le processus Java que vous souhaitez générer le fichier de vidage, cliquez sur l'enregistreur de vol et vous verrez la boîte de dialogue suivante:
Dans la zone déroulante de vidage de thread, vous pouvez sélectionner l'intervalle de temps pour générer le fichier de vidage. Dans l'exemple ci-dessus, un fichier de vidage sera généré toutes les 60 secondes. Après avoir sélectionné terminé, démarrez l'enregistreur de vol et vous pouvez voir le contenu du fichier de vidage dans le panneau Threads:
5. Windows (Ctrl + Break)
Cette méthode n'est valable que sur les systèmes d'exploitation Windows:
Sélectionnez la ligne de commande dans la fenêtre de la console
Appuyez sur la commande "Ctrl + Break" dans la fenêtre de ligne de commande
Ensuite, un fichier de vidage sera généré et le contenu du fichier de vidage sera imprimé dans la fenêtre de ligne de commande.
Remarque 1: Il existe plusieurs ordinateurs portables (comme la série Lenovo T) qui ont annulé la clé "Break", auquel cas vous devez Google pour les clés qui ont des fonctions similaires à la touche de rupture, et j'ai trouvé que la touche "Fonction Key + B" est la même que la touche de rupture, donc j'ai utilisé la touche "Ctrl + FN + B" pour générer le fichier de vidage.
Remarque 2: Un inconvénient de l'utilisation de la méthode ci-dessus est que le contenu du fichier de vidage sera imprimé sur la console. S'il n'y a pas de fichier de vidage, il est difficile pour nous d'utiliser des outils d'analyse tels que http://fasthread.io pour analyser le fichier de vidage. Par conséquent, vous pouvez utiliser la commande suivante pour sortir le contenu du fichier de vidage dans un fichier texte. Par exemple, le nom de votre application est SampleThreadProgram, donc les commandes habituelles sont les suivantes:
java -classpath . SampleThreadProgram
La commande pour sortir le contenu du fichier de vidage dans un fichier texte est la suivante:
java -classpath . SampleThreadProgram > C:/workspace/threadDump.txt 2>&1
Après avoir appuyé sur la touche "Ctrl + Break", le fichier de vidage sera enregistré sur c: /workspace/threaddump.txt.
6. Threadmxbean
En commençant par JDK 1.5, ThreadMXBean a été introduit. Il s'agit de l'interface de gestion du JVM. En utilisant cette interface, vous n'avez besoin que d'une petite quantité de code pour générer des fichiers vidants. Ce qui suit est la principale implémentation de l'utilisation de ThreadMXBean pour générer des fichiers de vidage:
public void DumpThreadDump () {ThreadMXBean ThreadMXBean = ManagementFactory.getThreadMXBean (); for (ThreadInfo Ti: ThreadmXbean.DumpallThreads (true, true)) {System.out.print (ti.toString ()); }}7. Dynamique de l'application d'outil APM
Certains outils de surveillance des performances de l'application offrent la fonction de génération de fichiers de vidage. Si vous utilisez la dynamique des applications pour surveiller votre application, voici les étapes pour générer des fichiers de vidage:
Ouvrez la fenêtre Créer Action et sélectionnez Diagnostics-> Prenez un vidage de thread dans la fenêtre d'action Créer;
Entrez le nom d'action, le nombre de fichiers de vidage à ramper et l'intervalle de temps (millisecondes) pour les fichiers de vidage rampant;
Si vous souhaitez effectuer certaines actions avant le début de l'action de vidage rampante, vous pouvez sélectionner l'exécution de l'approbation de requise avant cette case d'action et saisir l'adresse e-mail de l'individu ou du groupe;
Cliquez sur OK.
Résumer
Bien que j'ai répertorié 7 façons de saisir des fichiers de vidage plus tôt, IMHO, JSTACK et KILL -3 sont les meilleurs choix pour les raisons suivantes:
un. Simple, facile à implémenter;
né Général: Dans la plupart des cas, quel que soit le type de système d'exploitation, le vendeur Java, la version JVM, etc.