Vérifiez l'état des applications Java sans utiliser d'outils de surveillance

Aperçu

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

Vérifiez l'état des applications Java sans utiliser d'outils de surveillance
Surveillance de l'état des applications Java à l'aide d'Elasticsearch
Vérifiez l'état de l'application de la limite de débit de docker pull
Commande pour vérifier le nombre et l'état des threads Java
Vérifier l'état de migration des rails
Vérifiez le contenu du magasin de certificats Java
[Java] Vérifiez le nombre d'occurrences de caractères
État de l'application Java 9+
[Java] Vérifiez la version JDK du fichier war construit
Vérifiez le comportement de Java Intrinsic Locks avec bpftrace
Vérifier le fonctionnement de deux rôles avec une application de chat
[Java] Essayez de modifier les éléments de la chaîne Json à l'aide de la bibliothèque
L'histoire de la transmission de Java à Heroku à l'aide du pipeline BitBucket
J'ai essayé d'utiliser la fonction de cache d'Application Container Cloud Service
Essayez d'utiliser la fonction de mesure en deux points de Firebase Performance Monitoring. [Android]
Créons une application TODO en Java 5 Changer l'affichage de TODO
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
La version d'Elasticsearch que vous utilisez est-elle compatible avec Java 11?
[Java] Supprimer les éléments de la liste
[Rails] Vérifiez le contenu de l'objet
[Édition Java] Histoire de la sérialisation
Vérifiez la version de Cent OS
Comparaison Java à l'aide de la méthode compareTo ()
Gestion des fuseaux horaires avec Java
Résumé de la programmation orientée objet utilisant Java
L'origine des expressions Java lambda
J'ai essayé d'utiliser Google HttpClient de Java
Analyser et objectiver JSON à l'aide de l'annotation @JsonProperty de la bibliothèque Java Jackson
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
Vérifiez l'enregistrement MX de l'adresse e-mail avec java et vérifiez le domaine
[Java] Vérifiez si la chaîne de caractères est composée uniquement de blancs (= Vierge)
Afficher le calendrier et le jour japonais en utilisant la classe standard java8
Vérifiez l'indicateur après un certain laps de temps depuis que le thread a commencé à s'exécuter sans utiliser le thread Timer.
[Java] Type Express Enum sans utiliser le type Enum (énumération)
Essayez d'utiliser le framework Java Nablarch [Application Web]
Vérifiez le fonctionnement à l'aide de la jetée avec Maven.
Obtenez le résultat de POST en Java
Essayez d'utiliser || au lieu de l'opérateur ternaire
Vérifiez le contenu des paramètres avec le levier
Examiner l'utilisation de la mémoire des éléments Java
[Java] Obtenez le jour d'un jour spécifique
Formation des nouveaux arrivants à l'aide de la programmation Web-Basic à l'aide de Java-
Mapper sans utiliser de tableau en java
ERRORCODE = -4471 se produit dans une application Java qui utilise Db2.
Comparer les éléments d'un tableau (Java)
[jour: 5] J'ai résumé les bases de Java
Quelles sont les fonctionnalités mises à jour de Java 13
Mesurez facilement la taille des objets Java
Retour sur les bases de Java
Sortie du livre "Introduction à Java"
Mesure de la mémoire des applications Java sous Windows
Acquisition du contenu d'entrée à l'aide de Scanner (Java)
L'histoire de l'écriture de Java dans Emacs
Vérifiez la version du logiciel Web standard.
[Java] [Spring] Tester le comportement de l'enregistreur
Rôle de JSP dans les applications Web [Java]
Essayez d'utiliser la télécommande Wii en Java
Vérifiez le fonctionnement de l'interface à travers le thread