Maison >Java >javaDidacticiel >Méthodes de réglage des machines virtuelles Java JVM
jmap histo /pid > ./log.txt : afficher le nombre d'instances d'un certain processus, le nombre d'octets de mémoire occupés et la classe à laquelle il appartient
jmap - tas /pid : Afficher les informations sur le tas
jmap ‐dump:format=b,file=app.hprof /pid
Démarrez l'interface de gestion visuelle jvm via la commande jvisualvm pour importer le fichier de vidage pour analyse : Afficher la classe Exemple
Analyse du blocage : écrire un morceau de code de blocage
public class DeadLockTest { private final static Object lock1 = new Object(); private final static Object lock2 = new Object(); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (lock1) { try { System.out.println(Thread.currentThread().getName() + ": get the lock1"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock2) { System.out.println(Thread.currentThread().getName() + ": get the lock2"); } } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (lock2) { try { System.out.println(Thread.currentThread().getName() + ": get the lock2"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock1) { System.out.println(Thread.currentThread().getName() + ": get the lock1"); } } } }).start(); } }
Nom du fil "Thread-1" prio=5 priorité=5 ; 0x0000000019aa9000 thread id; nid=0x6c4 L'identifiant du thread local nid correspondant au thread ; java.lang.Thread.State : BLOCKED thread state
Démarrez la commande jvisualvm et sélectionnez le processus correspondant pour afficher le thread bloqué
Jstack analyse la pile de threads avec une utilisation élevée du processeur Informations
Démarrez une boucle while pour que le processeur continue de fonctionner
1 top -p /pid : Vérifiez l'utilisation des ressources du processus
Il est évident que ce processus provoque le. L'utilisation du processeur doit être proche de 100 %.
2. Appuyez sur H pour afficher les ressources occupées par chaque thread dans le processus
3. Recherchez la colonne PID où le processeur utilise près de 100 %, indiquant que le thread tid est 5027, et convertissez-la en hexadécimal en 13a3 via le convertisseur,
4. Exécutez jstack 5026|grep -A 10 13a3 via la commande jstack, vous pouvez obtenir les informations de pile du thread tid 13a3, puis trouver le numéro de ligne d'exécution qui fait que le CPU occupe 100 %
jinfo -flags /pid : Afficher les paramètres jvm
jinfo -sysprops /pid : Afficher les paramètres du système java
jstat -gc /pid : Statistiques de collecte des déchets
S0C : La taille de la première zone survivante, en Ko S1C : La taille de la deuxième zone survivante ; zone survivante ; S1U : la deuxième zone survivante EC : la taille d'Eden Park ; EU : la taille d'Eden Park ; OC : la taille de l'ancienne génération ; zone (métaespace) ; MU : la taille de la zone de méthode ; CCSC : Taille de l'espace de classe compressé ; CCSU : Taille d'utilisation de l'espace de classe compressé ; YGC : Le nombre de garbage collection de jeune génération ; unit s ; FGC : le nombre de garbage collection d'ancienne génération ; FGCT : le temps de consommation de garbage collection d'ancienne génération, unit s ;
NGCMN : capacité minimale de la nouvelle génération ; NGCMX : capacité maximale de la nouvelle génération ; NGC : capacité actuelle de la nouvelle génération S0C : la taille de la première zone survivante ; ; EC : la taille de l'Eden Campus ; OGCMN : la capacité minimale de l'ancienne génération ; OGCMX : la taille maximale de l'ancienne génération ; OC : la taille actuelle de l'ancienne génération ; capacité des métadonnées ; MCMX : capacité maximale des métadonnées ; MC : taille actuelle de l'espace des métadonnées ; CCSMN : taille minimale de l'espace de la classe de compression ; CCSMX : taille maximale de l'espace de la classe de compression ; CCSC : taille actuelle de l'espace de la classe de compression ; ; FGC : Le nombre de GC dans l'ancienne génération
jstat -gcnew /pid : Afficher les statistiques de garbage collection de la nouvelle générationTT : Le nombre de fois où l'objet survit dans la nouvelle génération ; nombre de fois où l'objet survit dans la nouvelle génération Le nombre maximum de fois ; DSS : taille attendue de la zone de survivant
jstat -gcnewcapacity/pid : Afficher la capacité de mémoire de la nouvelle générationS0CMX : taille maximale de la zone de survivant 1 S1CMX ; : taille maximale de la zone de survivant 2 ECMX : taille maximale d'Eden Park
jstat -gcold /pid : Afficher les statistiques de collecte des ordures d'ancienne générationjstat -gcoldcapacity/pid : Afficher la capacité de mémoire d'ancienne génération
jstat - gcmetacapacity/pid : Afficher les statistiques sur l'espace des métadonnées
Vous pouvez optimiser les paramètres de démarrage de l'application Java via la commande jstat gc -pid. jstat -gc pid 1000 10 (exécuter la commande toutes les 1 seconde, 10 fois au total) pour estimer le nombre d'objets qui seront ajoutés à la zone Eden. par seconde. Vous pouvez utiliser le temps d'ajustement des résultats spécifiques. En fait, l'idée d'optimisation est simplement d'essayer de faire en sorte que les objets survivants après chaque Young GC représentent moins de 50 % de la zone Survivor, et de les conserver dans la jeune génération. Essayez de ne pas laisser l'objet entrer dans la vieillesse. Minimisez la fréquence des Full GC pour éviter l’impact des Full GC fréquents sur les performances de la JVM.
Pour certaines données anciennes, telles que la mémoire au niveau JVM, n'est pas nettoyée à temps, ce qui entraîne un empilement de plus en plus de données. Au fil du temps, un GC complet sera fréquemment provoqué, entraînant des fuites de mémoire. Vous pouvez utiliser l'architecture de cache mature ehcache, qui a mis en œuvre une stratégie d'élimination des données LRU.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!