jstack est une commande fournie avec le JDK. Si la machine exécute Java, vous pouvez facilement obtenir l'état du processus sans installer d'outil de surveillance spécial.
Cet outil affiche un vidage de thread sur la console de ligne de commande. Vous pouvez l'utiliser si vous connaissez le PID Java. Vous pouvez utiliser cet outil pour obtenir l'état du thread et l'utiliser à des fins d'investigation lorsque les performances ne sont pas bonnes ou lorsqu'un phénomène tel qu'un blocage mort se produit.
Usage
$ jstack -l <pid>
Vous pouvez vérifier la trace de la pile pour chaque thread dans le résultat de sortie.
"Thread-0" #12 prio=5 os_prio=0 cpu=0.00ms elapsed=496.25s tid=0x00007f6a741f1800 nid=0x1a5 waiting on condition [0x00007f6a17a9f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep([email protected]/Native Method)
at Server.sleepForever(Server.java:20)
at Server.lambda$0(Server.java:9)
at Server$$Lambda$1/0x0000000840060840.run(Unknown Source)
at java.lang.Thread.run([email protected]/Thread.java:834)
"Thread-1" #13 prio=5 os_prio=0 cpu=0.00ms elapsed=496.25s tid=0x00007f6a741f3800 nid=0x1a6 waiting on condition [0x00007f6a1798f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep([email protected]/Native Method)
at Server.sleepForever(Server.java:20)
at Server.lambda$0(Server.java:9)
at Server$$Lambda$1/0x0000000840060840.run(Unknown Source)
at java.lang.Thread.run([email protected]/Thread.java:834)
"Thread-2" #14 prio=5 os_prio=0 cpu=0.00ms elapsed=496.25s tid=0x00007f6a741f5000 nid=0x1a7 waiting on condition [0x00007f6a1787f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep([email protected]/Native Method)
at Server.sleepForever(Server.java:20)
at Server.lambda$0(Server.java:9)
at Server$$Lambda$1/0x0000000840060840.run(Unknown Source)
at java.lang.Thread.run([email protected]/Thread.java:834)
Par exemple, dans le cas où java s'exécute dans plusieurs threads, lorsqu'un phénomène tel que certains threads consommant beaucoup d'utilisation du processeur ou de mémoire se produit, il peut être spécifié comme suit.
(1) Identifiez le processus qui consomme les ressources du processus.
$ top -H -b -n 1 -p ${java pid}
Obtenez le PID consommateur de ressources à partir de la commande ci-dessus
(2) Convertir le PID en hexadécimal et grep à partir du résultat de jstack ③ Puisque la trace qui correspond au nombre nid et hexadécimal est un processus consommateur de ressources, suivez à partir de là.
Il est possible d'enquêter dans un tel flux.
Recommended Posts