Dépannage des problèmes de fonctionnement et de maintenance du système - Analyse élevée de la mémoire Java

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.
Insérer la description de l'image ici

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.

Insérer la description de l'image ici

4. Exécutez la commande jstat -gcutil $pid 5s pour vérifier l'utilisation de la mémoire.

Insérer la description de l'image ici

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

Insérer la description de l'image ici

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

Insérer la description de l'image ici

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.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40012925/article/details/132164430
conseillé
Classement