Définition JSTACK:
JSTACK est un outil de trace de pile fourni avec des machines virtuelles Java.
Introduction de base:
JSTACK est utilisé pour générer un instantané de fil de l'heure actuelle de la machine virtuelle Java. Les instantanés de fil sont une collection de piles de méthodes que chaque thread de la machine virtuelle Java actuelle exécute. L'objectif principal de la génération d'instantanés de fil est de localiser les raisons des pauses à long terme de threads, tels que des blocs de blocage entre les threads, les boucles mortes et l'attente à long terme causée par la demande de ressources externes.
Lorsqu'un fil s'arrête, vous pouvez vérifier la pile d'appels de chaque fil via JSTACK, et vous pouvez savoir ce que fait le thread insensible en arrière-plan ou quelles ressources il attend.
Format de commande:
jstack [option] pid
Paramètres de base:
-F Force Imprimer les informations de pile lorsque «jstack [-l] pid» n'a pas correspondant
-l Liste longue. Imprimez des informations supplémentaires sur le verrou, telles que la liste de synchronizants propriétaires appartenant à java.util.concurrent.
-M Imprimez toutes les informations de pile de Java et des cadres C / C ++ natifs. -H | -Sésifier les informations d'aide d'impression
ID de processus Java PID qui doit être imprimé des informations de configuration, vous pouvez utiliser l'outil JPS pour interroger
Cas
C: / Users / Administrator> JSTACK 5516FULL DUMPLEMENT Java Hotspot (TM) 64 bits serveur VM (24,79-b02 Mode mixte): "DestroyJavm" PRIO = 6 TID = 0x0000000000000000000000] Java.Lang.thread.state: Runnable "Thread-1" prio = 6 tid = 0x00000000000cb13800 NID = 0x19AC En attente de l'entrée du moniteur [0x0000000000d67f000] java.lang.thread.State: Blocké (sur objet Monitor) à Thread.DeadlockDemo 2.Run (dadlockdemo.java:35) - Waiting to Lock java.lang.string) - Locké <0x00000007d5a9beb8> (a java.lang.string) sur java.lang.thread.run (source inconnue) "Thread-0" prio = 6 tid = 0x000000000cb0e800 NID = 0x6bc en attente de moniteur [0x000000000d48f000] java.lang.thread.state: bloqué (sur moniteur d'objet) sur thread.deadlockdemo 1 $. java.lang.thread.run (source inconnue)
Un code impassible est exécuté ici, ce qui fait que les deux fils du programme attendent que l'autre partie divulgue le verrou, ce qui a entraîné une impasse du programme.
À partir de ce code, on peut voir clairement que la ligne 35 et la ligne 21 dans Deadlockdemo.class sont bloquées, puis nous devons optimiser cette fonction.
PS: En fonctionnement réel, les informations de vidage ne sont souvent pas suffisantes pour confirmer le problème. Il est recommandé de générer trois informations de vidage. Si chaque vidage pointe vers le même problème, nous déterminerons la typicité du problème.
Résumer
Ce qui précède est tout au sujet de l'analyse des instances JSTACK et du vidage de thread dans cet article. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!