jmap histo /pid > ./log.txt: Zeigt die Anzahl der Instanzen eines bestimmten Prozesses, die Anzahl der belegten Speicherbytes und die Klasse an, zu der er gehört
jmap - Heap /pid: Heap-Informationen anzeigen
jmap ‐dump:format=b,file=app.hprof /pid
Starten Sie die visuelle JVM-Schnittstelle zum Importieren über den Befehl jvisualvm die Dump-Datei zur Analyse: Klassenbeispiel anzeigen
Deadlock-Analyse: Schreiben Sie einen Deadlock-Code
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(); } }
"Thread-1" Thread-Name; 0x0000000019aa9000 Thread-ID; nid=0x6c4 Die dem Thread entsprechende lokale Thread-ID; java.lang.Thread.State: BLOCKIERTER Thread-Status
Starten Sie den Befehl jvisualvm und wählen Sie den entsprechenden Prozess aus, um den blockierten Thread anzuzeigen
Jstack analysiert den Thread-Stack mit Informationen zu hoher CPU-Auslastung
Starten Sie eine While-Schleife, um die CPU am Laufen zu halten
1: Überprüfen Sie die Ressourcennutzung des Prozesses
Es ist offensichtlich, dass dieser Prozess das verursacht Die CPU-Auslastung soll nahezu 100 % betragen.
2. Drücken Sie H, um die von jedem Thread im Prozess belegten Ressourcen anzuzeigen.
3 Suchen Sie die PID-Spalte, in der die CPU fast 100 % nutzt, was darauf hinweist, dass die Thread-ID 5027 ist, und konvertieren Sie sie in Hexadezimalzahl 13a3 über den Konverter ,
4. Führen Sie jstack 5026|grep -A 10 13a3 über den Befehl jstack aus. Sie können die Stapelinformationen des Threads tid 13a3 abrufen und dann die Ausführungszeilennummer ermitteln, die dazu führt, dass die CPU 100 % belegt
jinfo -flags /pid: JVM-Parameter anzeigen
jinfo -sysprops /pid: Java-Systemparameter anzeigen
jstat -gc /pid : Garbage-Collection-Statistiken
S0C: Die Größe des ersten Überlebensbereichs in KB; S1C: Die Größe des zweiten Überlebensbereichs; S0U: Die Nutzungsgröße des ersten Überlebensgebiet; S1U: Das zweite Überlebensgebiet; EC: die Größe von Eden Park; OC: die Größe der alten Generation; Bereich (Metaraum); MU: die Größe des komprimierten Klassenraums; YGC: die Anzahl der Speicherbereinigungen der jungen Generation; Einheit s: Die Anzahl der Garbage Collections der alten Generation; FGCT: Die Verbrauchszeit der Garbage Collection der alten Generation;
NGCMN: minimale Kapazität der neuen Generation; NGCMX: aktuelle Kapazität der neuen Generation; S1C: die Größe des zweiten überlebenden Bereichs ; EC: die Größe des Eden Campus; OGCMN: die maximale Kapazität der alten Generation; OC: aktuelle Größe der alten Generation; Metadatenkapazität; MCMX: aktuelle Größe des Metadatenraums; CCSC: aktuelle Größe des Komprimierungsklassenraums; ; FGC: Die Anzahl der GCs in der alten Generation
jstat -gcnew /pid: Zeigt die Garbage-Collection-Statistiken der neuen Generation anTT: Die Häufigkeit, mit der das Objekt in der neuen Generation überlebt; Häufigkeit, mit der das Objekt in der neuen Generation überlebt. DSS: erwartete Größe des Überlebensbereichs
jstat -gcnewcapacity/pid: Speicherkapazität der neuen Generation anzeigenS0CMX: maximale Größe des Überlebensbereichs 1; : maximale Survivor Area 2-Größe; ECMX: maximale Eden Park-Größe
jstat -gcold /pid: Garbage Collection-Statistiken der alten Generation anzeigenjstat -gcoldcapacity/pid: Speicherkapazität der alten Generation anzeigen
jstat - gcmetacapacity/pid: Statistiken zum Metadatenspeicherplatz anzeigen
Sie können die Startparameter von Java-Anwendungen mit dem Befehl jstat gc -pid 1000 10 optimieren (führen Sie den Befehl alle 1 Sekunde aus, insgesamt 10 Mal), um abzuschätzen, wie viele neue Objekte hinzugefügt werden Die Eden-Fläche pro Sekunde kann je nach Ergebnis angepasst werden. Tatsächlich besteht die Optimierungsidee einfach darin, zu versuchen, die überlebenden Objekte nach jedem Young GC auf weniger als 50 % des Survivor-Bereichs zu reduzieren und sie in der jungen Generation zu belassen. Versuchen Sie, das Objekt nicht in die Jahre zu kommen. Versuchen Sie, die Häufigkeit von Full GC so weit wie möglich zu reduzieren, um die Auswirkungen häufiger Full GC auf die JVM-Leistung zu vermeiden.
Bei einigen alten Daten, z. B. auf JVM-Ebene, wird der Speicher nicht rechtzeitig bereinigt, was zu immer mehr Datenhäufungen führt, was häufig zu einem vollständigen GC führt im Laufe der Zeit, was zu einem Speicherverlust führt. Sie können die ausgereifte Cache-Architektur ehcache verwenden, die eine LRU-Dateneliminierungsstrategie implementiert hat.
Das obige ist der detaillierte Inhalt vonMethoden zur Optimierung virtueller Java-JVM-Maschinen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!