Préface
Cet article présente principalement les outils de gestion des défauts des machines virtuelles Java. Ces outils mentionnés dans l'article comprennent:
| nom | Fonctions principales |
| JPS | L'outil d'état du processus JVM, affiche tous les processus de machine virtuelle virtuelle dans le système spécifié. Hôte généralement local |
| jstat | Outil de surveillance des statistiques JVM, utilisé pour collecter les données de fonctionnement de tous les aspects de la machine virtuelle Hotspot |
| jinfo | Informations sur la configuration pour Java, afficher les informations de configuration de la machine virtuelle |
| jmap | La carte de mémoire pour Java, génère un instantané de stockage de mémoire d'une machine virtuelle (fichier theapdump) |
| jhat | Le navigateur de vidage de tas JVM est utilisé pour analyser les fichiers Heapdump. Il établit un serveur HTTP / HTML, permettant aux utilisateurs d'afficher les résultats d'analyse sur le navigateur. |
| jstack | Trace de pile pour Java, affiche des instantanés de fil de machines virtuelles |
JPS: outil d'état du processus de machine virtuelle
La fonction de JPS est similaire à la commande PS dans Unix / liunx. C'est juste qu'il imprime le processus de machine virtuelle en cours d'exécution et affiche le nom de la classe principale d'exécution de la machine virtuelle et l'ID local de machine virtuelle locale de ces processus (identifiant de machine virtuelle locale, LVMID, généralement l'ID de processus système).
Format de commande JPS:
jps [options] [hostid]
JPS peut interroger l'état du processus de machine virtuelle à distance du service RMI via le protocole RMI, et Hostid est le nom d'hôte enregistré dans le registre RMI.
JPS Autres options communes:
-Q Sortie LVMID, omettant le nom de la classe principale;
-m paramètres de sortie transmis à la fonction principale () de la classe principale lorsque le processus de machine virtuelle est démarré;
-L Sortie du nom complet de la classe principale. Si le processus exécute un package JAR, publiez le chemin de JAR;
-VORTIR JVM Paramètres lorsque le processus de machine virtuel démarre.
Exemple de commande JPS:
[root @ localhost ~] # jps -l3914 org.zhangyoubao.payservice.app12180 Sun.tools.jps.jps6913 org.zhangyoubao.userprofiler.app
JSTAT: outil de surveillance des statistiques de la machine virtuelle
JSTAT est un outil utilisé pour surveiller diverses informations d'état de fonctionnement des machines virtuelles. Il peut afficher des paramètres d'exécution tels que la charge de classe, la mémoire gc.jit dans les processus de machine virtuelle locale ou distante.
Format de commande JSTAT:
jStat [option vmid [interval [s | ms] [count]]]
L'intervalle et le nombre représentent les intervalles et les temps de requête. Si ces deux paramètres sont omis, cela signifie que ne demande qu'une seule fois.
Autres options couramment utilisées pour JSTAT:
-Classe Monitor Le nombre de charges / décharges de classe et le temps total de chargement de l'espace;
-Méliste du compilateur Méthodes, qui prend du temps et d'autres informations compilées par le compilateur JIT;
-Printcompilation La méthode qui publie une méthode compilée JIT;
-GC surveille le statut du tas Java;
-gcapacité Le contenu de surveillance est fondamentalement le même que -GC, mais la sortie se concentre sur l'espace maximum / minimum de chaque zone de Java;
-Gcutil Le contenu de surveillance est fondamentalement le même que -GC, mais la sortie se concentre sur l'utilisation de l'espace occupe 100%;
-Gccause comme la fonction -gcutil, la sortie supplémentaire provoque le dernier GC;
-GcNew surveille le statut de la nouvelle génération de GCS;
-GcNewCapacity surveille la nouvelle génération et publie la même chose que -gccapacity;
-Gcold surveille le statut de GC chez les personnes âgées;
-GcoldCapacity surveille les personnes âgées et en sort la même chose que -gccapacity;
-GCPERMCAPACTIY MONTENTIONS GÉNÉRATION PERMANENT (ZONE DE CODE), émet la même chose que -gccapacity;
Échantillon de commande JSTAT:
[root @ localhost ~] # JSTAT -GC 6913 S0C S1C S0U S1U EU EU OC OU PC PU YGC YGCT FGC FGCT GCT 34048.0 34048.0 0.0 3217.8 272640.0 171092.7 683264.0 168910.7 46872.0 28031.2 378577710.7 46872.0 28031.2 378577710.7 46872.0 28031.2 378577771 380.644 69 3.447 384.091
Jinfo: outil d'information de configuration Java
La fonction de Jinfo est de visualiser et d'ajuster divers paramètres de la machine virtuelle en temps réel.
Format de commande Jinfo:
Jinfo [Option] PID
Autres options couramment utilisées pour Jinfo:
-fag name = valeur modifier les paramètres
-paramètre de paramètre de nom de laflag
Exemple de commande Jinfo:
[root @ localhost ~] # Jinfo 6913Attaching to Process ID 6913, veuillez patienter ... Debugger a joint avec succès. -DServer.root = / usr / local / user_profiler -dcom.sun.management.jmxremote.port = 7003 -dcom.sun.management.jmxremote.ssl = falsive -Xx: + printgcdatestamps -xx: + useConcmarksweepgc
JMAP: outil de mappage de mémoire Java
La commande JMAP peut être utilisée pour produire des instantanés de stockage de tas (fichiers de vidage). Il peut également vérifier les détails de la file d'attente finalisée (file d'attente d'automoute), du tas Java et de la zone de code.
Format de commande jmap:
JMAP [Option] VMID
Autres options couramment utilisées pour JMAP:
-Dump génère un instantané du stockage de tas Java. Format: -dump: [live,] format = b, file = <filename>;
-FinalizerInfo affiche un objet dans F-LIEE qui attend que le phénomène Finalizer exécute la méthode Finalize;
-Heap affiche les informations détaillées du tas Java, telles que le type de recycler utilisé, configuration des paramètres, état de génération en attente;
-Histo affiche des statistiques des objets dans le tas, y compris les classes, les livres d'instructions et la capacité totale;
-Permstat Utilisez Classloader comme portail statistique pour afficher les informations de mémoire de génération permanente;
-F Lorsque l'option de tas-tas-dump de processus virtuel ne répond pas, vous pouvez utiliser cette option pour forcer un instantané de vidage.
Exemple de commande JMAP:
[root @ localhost ~] # jmap -histo 6913 | tête -20 num #instances #Bytes Nom de classe ------------------------------------------ 1: 1864966 113459432 [C 2: 201846 49201192 [B 3: 1597065 38329560 Java.Lang.string 4: 117777770 15037056 org.zhangyoubao.thriftdef.Userusefulinfo 5: 47104 11072048 [i 6: 268631 8596192 java.util.hashmap $ Entrée 7: 48812 7451760 com.mysql.jdbc.ConnectionPropertiesIMPL $ booleanconnectionproperty 9: 48812 6257856 <méthodeklass> 10: 4230 5271640 <Coundpoolklass> 11: 159491 5103712 org.zhangyoubao.common.cache.adv.node 13: 127027 4064864 java.util.concurrent.concurrenthashmap $ Hashentry 14: 230433 3686928 Java.lang.Integer 15: 3765 3049824 <ConstantpoolCachklass> 16: 20917304824 <Imt constantpoolcacheklass> 16: 20917304824 <constantepoolcacheklass> 16: 20917 301204824 <CugalpoolCaCHEKLASS> com.mysql.jdbc.field 17: 4230 2943840 <stanceklassklass>
où [C=char[],[B=byte[],[S=short[],[I=int[],[[I=int[][] .
JHAT: outil d'analyse d'instantané de transfert de tas de machine virtuelle
La commande JHAT est utilisée en conjonction avec JMAP et est utilisée pour analyser les fichiers de vidage générés par JMAP. JHAT dispose d'un Mini HTTP / HTML Server intégré. Après l'analyse, les résultats du fichier de vidage généré peuvent être affichés dans le navigateur.
Format de commande JHAT:
nom de fichier jmap
Exemple de commande JHAT:
[root @ localhost ~] # jhat html_intercept_server.dump Lecture de html_intercept_server.dump ... le fichier de vidage créé le mer 23 nov 13:05:33 CST 2016Snapshot Read, résolvant ... Résolution des références 203681 ... CHASING RÉFÉRENCES, ATTENDRE 40 points .................. Le serveur HTTP sur le port 7000Server est prêt.
JSTACK: outil de trace de pile de threads java
JSTACK est utilisé pour générer un instantané de fil de l'heure actuelle de la machine virtuelle. Les instantanés de thread sont le plan de pile de méthode que chaque thread de la machine virtuelle actuelle exécute. L'objectif principal de la génération d'instantanés de fil est de localiser les raisons pour lesquelles le fil est interrompu pendant longtemps. Lorsque le thread s'arrête, utilisez JSTACK pour voir ce que font les fils qui ne répondent pas en arrière-plan ou quelles ressources attendent.
Format de commande jstack:
JSTACK [Option] VMID
jstack Autres options:
-F Lorsque la demande de sortie normalement n'est pas répondu, forcez la pile de thread à être sortie;
-L Affichez des informations supplémentaires sur le verrou en plus de l'affichage de la pile;
-M Si une méthode locale est appelée, la pile de C / C ++ peut être affichée.
Exemple de commande JSTACK:
[root @ localhost ~] # JSTACK 29577 | Head -202016-11-23 12: 58: 23full Dump OpenJDK Server VM (24.91-b01 Mode mixte): "Pool-1-thread-7261" Prio = 10 Tid = 0x0893a400 NID = 0x6b0d en attente [0x652ad000] TIMED_WAITing (parking) sur Sun.misc.unsafe.park (méthode native) - Parking pour attendre <0x75b5b400> (a java.util.concurrent.synchroneouseue $ transferstack) à java.util.concurrent.locks.locksupport.parknanos (locksupport.java:26) attarknanos (locksupport.java:26) att.parknanos (locksuppor java.util.concurrent.synchronousqueue $ transferstack.awaitfulfill (synchronousqueue.java:460) à java.util.concurrent.synchronousqueue $ transferstack.transfer (synchronousqueue.java:359) java.util.concurrent.synchronousqueue.poll (synchronousqueue.java:942) à java.util.concurrent.threadpoolexecutor.gettask (wheadpoolexecutor.java:1068) java.util.concurrent.threadpoolexecutor.runworker (threadpoolexecutor.java:1130) sur java.util.concurrent.threadpoolexecutor $ worker.run (threadpoolexecutor.java:615) at java.lang.thread.run (thread.java:745) "Service_hot_lscs-0" Daemon Prio = 10 TID = 0x6982dc00 nid = 0x6aeb Waiting on Statue [0x64ce1000] Java.lang.thread.State: Timed_waiting (Sleeping) at Java.Lang.thread.Sleent (native) att) at Java.Lang.Thread.Sleep (native) att) at Java.Lang.Thread.Sleent (native) att) at Java.Lang.thread.Sleep (natif) ATT (Sleente org.zhangyoubao.video.client.runner.simplevideorunner.dowork (SimpleVideorunner.java:150)
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article sera d'une aide à votre étude ou à votre travail. Si vous avez des questions, vous pouvez laisser un message pour communiquer.