Fonctionnement et maintenance du système Analyse élevée de la mémoire Java
- 1. Vérifiez l'utilisation de la mémoire
- 2. Vérifier l'état du thread d'un processus
- 3. Exécutez la commande jmap $pid pour observer l'utilisation de la mémoire.
- 4. Exécutez la commande jstat -gcutil $pid 5s pour vérifier l'utilisation de la mémoire.
- 5. Exécutez la commande jmap –heap $pid pour afficher les paramètres de chaque zone mémoire.
- 6. Exécutez la commande jmap -histo:live $pid pour afficher le nombre d'instances de chaque classe, l'utilisation de la mémoire et le nom complet de la classe. Exécuté une fois par minute, 5 fois en continu
- 7. Obtenez le fichier de vidage
- 8. Afficher les informations sur la pile de processus
1. Vérifiez l'utilisation de la mémoire
Utilisez top pour afficher l'utilisation de la mémoire du processus, shift+m pour trier l'utilisation de la mémoire par ordre décroissant et shift+p pour trier l'utilisation du processeur par ordre décroissant.
2. Vérifier l'état du thread d'un processus
ps p $pid -L -o pcpu,pmem,pid,tid,time,tname,cmd
3. Exécutez la commande jmap $pid pour observer l'utilisation de la mémoire.
4. Exécutez la commande jstat -gcutil $pid 5s pour vérifier l'utilisation de la mémoire.
Signification des colonnes de résultats :
S0 — le pourcentage de l'espace utilisé dans la zone de l'espace Survivant 0 sur le tas
S1 — le pourcentage de l'espace utilisé dans la zone de l'espace Survivant 1 sur le tas
E — le pourcentage de l'espace utilisé dans le Zone d'espace Eden sur le tas O — Pourcentage d'espace utilisé dans la zone d'espace Survivant
sur le tas Pourcentage d'espace utilisé dans la zone d'espace ancien
P — Pourcentage d'espace utilisé dans la zone d'espace Perm
YGC — Nombre d'occurrences Young GC depuis le démarrage de l'application à l'échantillonnage
YGCT – Temps passé dans Young GC entre le démarrage de l'application et l'échantillonnage (en secondes)
FGC – le nombre de fois où un Full GC s'est produit entre le démarrage de l'application et l'échantillonnage
FGCT – le temps nécessaire pour Full GC entre le démarrage de l'application et l'échantillonnage (en secondes)
GCT - le temps total passé en garbage collection depuis le démarrage de l'application jusqu'à l'échantillonnage (en secondes) secondes)
GCT est la somme du temps de YGCT et FGCT.
5. Exécutez la commande jmap –heap $pid pour afficher les paramètres de chaque zone mémoire.
6. Exécutez la commande jmap -histo:live $pid pour afficher le nombre d'instances de chaque classe, l'utilisation de la mémoire et le nom complet de la classe. Exécuté une fois par minute, 5 fois en continu
7. Obtenez le fichier de vidage
jmap -dump:live format=b,file=./dump.bin $pid
8. Afficher les informations sur la pile de processus
jstack -l $pid> /usr/local/temp/jstack.log
Analyse d'impression de la commande JSTACK
Format du journal
"Keep-Alive-Timer" représente le nom du thread. Dans le développement réel, il est nécessaire de choisir un nom lié à l'entreprise et familier à l'utilisateur pour faciliter le dépannage.
"prio=8" indique la priorité du thread.
"os_prio=0" indique la priorité au niveau du système d'exploitation.
"tid=0x000055868e1e9000" représente l'identifiant du thread.
"nid=0x394f" indique l'ID de thread mappé par le système d'exploitation.
"0x00007fabd4f44000" représente l'adresse de départ de la pile de threads.
Analyse détaillée
en attente de verrouiller <0x00000000d6349040>, c'est-à-dire essayer d'acquérir un verrou sur l'objet dont l'adresse est 0x00000000d6349040 ; mais l'objet est verrouillé par le thread (verrouillé <0x00000000d6349040>).
wait on condition [0x00007fabd5b4e000] : indique qu'il attend qu'une certaine condition se déclenche.
en attente de l'entrée du moniteur [0x000000001bbcf000] : indique que le thread attend d'acquérir le verrou.
Parmi eux : java.lang.Thread.State : WAITING (parking) : attente que cette condition se produise ;
java.lang.Thread.State : TIMED_WAITING (parking ou sleep) : chronométré, si la condition ne se produit pas, il se réveillera se relève régulièrement.
MEM.
Remarque : jmap et jstack doivent être exécutés en utilisant le même utilisateur que le processus.