In diesem Abschnitt wird nur der tatsächliche Kampfteil eingeführt. Für bestimmte theoretische Parameter bitte Baidu.
Erforderliche Tools: Linux Server JMeter Test Tool Xshell Eine Webanwendung
Die JVM -Parameter von Tomcat können in Catalina.sh konfiguriert werden. Wenn sie sich im Fenster befinden, können Sie die .bat -Datei konfigurieren.
Konfiguration 1:
Hier habe ich einen GC -Protokollweg als /home/log/gc.log konfiguriert, um das GC -Protokoll zu drucken. Der anfängliche Heap und der maximale Heap -Speicher werden auf 50 m gesetzt. Wenn die Ausgabedump -Datei überfüllt ist, verwendet sie einen seriellen Müllkollektor und die Größe der dauerhaften Generation von 50 m.
Stellen Sie die Webanwendung in das entsprechende Verzeichnis, konfigurieren Sie Server.xml (die Konfiguration wird hier nicht eingeführt) und starten Sie Tomcat.
Durchsatztests erfolgt mit einem Druckprüfwerkzeug (JMETER). Schüler, die es noch nie benutzt haben, können es herunterladen und auf der offiziellen Website http://jmeter.apache.org/ lernen
Erstellen Sie eine Benutzergruppe (10 Threads, jeder Thread requiriert 1000 Mal), richten Sie die Informationen der HTTP -Anforderung ein, generieren Sie einen aggregierten Bericht und ein GC -Protokoll
Schauen wir uns zuerst das GC -Protokoll an:
Vollständige GC auf dem Bildschirm, überprüfen Sie schließlich den Gesamtbericht:
Der Durchsatz wird bei 122,7 pro Sekunde gehalten. Aus diesem Fall können wir erkennen, dass die alte Generation im Grunde genommen voll ist, und nach FULLGC wird die neue Generation noch etwas übrig haben. Im Allgemeinen ist die Pausezeit des vollständigen GC am längsten und erfolgt so häufig, dass eine solche Konfiguration offensichtlich unangemessen ist.
Konfiguration 2:
Diese Konfiguration erhöht hauptsächlich den maximalen Heap -Speicher. Um die virtuelle Maschine automatisch zu erweitern und eine stabile Heap -Speichergröße zu erhalten.
Achten Sie einfach auf den maximalen Heap -Speicher von 82924K beträgt etwa 80 m, was bedeutet, dass die virtuelle Maschine den Heap -Speicher automatisch auf 80 m erweitert und stabilisiert. Dieser Konfigurationstest soll nur einen stabilen Heap -Speicher für den nächsten Test finden.
Konfiguration Drei:
Stellen Sie den anfänglichen Speicher des Heaps um 128 m ein.
Aus den Ergebnissen der Konfiguration 2 ist ersichtlich, dass der Heap -Speicher schließlich bei etwa 80 m stabil ist, sodass ein Heap -Speicher kleiner als 80 m wahrscheinlich eine große Anzahl von GC -Reaktionen verursacht. Hier setze ich den Heap -Speicher auf 128 m, was die Anzahl der GCs verringern kann.
Sie können sehen, dass der Durchsatz geringfügig zugenommen hat, die Anzahl der GCs erheblich abgenommen hat und die Zeitintervalle von GCs länger geworden sind.
Konfiguration 4:
Derzeit mit Parallalgc Recycler, einem multitHhread -Parallel -Recycler.
Der Durchsatz des GC -Recyclers mit Multithread -Parallel wurde leicht verbessert. (Parallalgc und SerialGC haben nur geringe Auswirkungen auf den Durchsatz ohne GC -Druck.)
Konfiguration 5:
Konfiguration 6:
Nach Abschluss der Konfiguration 3 tritt GC häufig im Heap -Speicher unter 80 m auf. In Kombination mit der in der Konfiguration 4 erhaltenen Schlussfolgerung wird der Durchsatz von ParallelgC und SerialGC bestimmte Unterschiede aufweist. Wenn der Heap -Speicher von 5 und 6 mit 64 m <80 m konfiguriert ist, tritt häufig GC auf. Bei der Verwendung verschiedener GC -Recycler wird es theoretisch einen großen Unterschied im Durchsatz geben, aber warum ist der Unterschied in meinem Experiment nicht sehr groß und warum? Hey, meine Familie ist arm. Ich benutze eine Single-Core-CPU. Bei Single-Core sind die Leistungsänderungen von ParallelgC nicht offensichtlich. SerialGC wird empfohlen, wenn Einzelkern- oder Parallelfunktionen schwach sind. Schüler, die die Bedingungen haben, können es mit einem Multi-Core-Server versuchen!
Konfiguration 7:
Versuchen Sie es mit Parnewgc. Die neue Generation verwendet Parnewgc, um zu recyceln, während die alte Generation immer noch serialGC zum Recyceln verwendet. Sehen Sie, wie die Leistung ist?
Es hat eine bessere Leistung als die Verwendung eines seriellen Recyclers, aber eine schlechtere Leistung als die Verwendung eines parallelen Recyclers.
Darüber hinaus kann das Upgrade der JDK -Version die Leistung auch ein wenig verbessern, aber das Upgrade der JDK -Version wird mit bestimmten Risiken geliefert, und einige unbekannte Fehler können in die neue Version von JDK eingeführt werden.
Schließlich habe ich einige häufig verwendete JVM -Konfigurationsparameter als Referenz aufgeführt:
1. Parameter im Zusammenhang mit der seriellen Erholungsperiode
• -xx:+useserialGC: Verwenden Sie serielle Sammler in den neuen und alten Generationen
• -xx: Überleben
• -xx: preteuresizethreshold: Stellen Sie den Schwellenwert für große Objekte fest, um direkt in das Alter einzutreten. Wenn die Größe des Objekts diesen Wert überschreitet, wird er im Alter direkt zugewiesen
• -xx: MaxTeuringThreshold: Legt den maximalen Alterswert des Objekts fest, das in das Alter eintritt. Nach jedem kleinen GC wird das Alter des Subjekts durch 1 hinzugefügt. Jedes Objekt, das größer als dieses Alter ist, wird definitiv in das Alter eintreten.
2. Parallele GC-bezogene Parameter
• -xx:+useParnewgc: Verwenden Sie parallele Sammler in der neuen Generation.
• -xx:+useParalleloldGC: Verwenden Sie parallele Sammler im Alter
• -xx:+parallelgcthreads: Legt die Anzahl der für die Müllsammlung verwendeten Threads fest, die normalerweise so eingestellt werden können, dass sie der Anzahl der CPUs entspricht. Wenn es eine große Anzahl von CPUs gibt, ist es auch möglich, einen relativ geringen Wert festzulegen.
• -xx:+maxgcpausemillis: Stellen Sie die maximale Müllsammlung Pause ein. Sein Wert ist eine Ganzzahl größer als 0. Wenn der Sammler funktioniert, passt er die Größe des Java -Haufens oder einige andere Parameter an und steuert die Pausezeit so weit wie möglich an maxgcpausemillis.
• -xx: +useadaptiveSizepolicy: Schalten Sie die adaptive GC-Strategie ein. In diesem Modus werden Parameter wie die Größe der neuen Generation und das Verhältnis von Survivio sowie das Alter des Objekts in der alten Generation automatisch angepasst, um den Gleichgewichtspunkt zwischen Haufengröße, Durchsatz und Pause zu erreichen.
• -xx:+gctimeratio: Setzen Sie die Durchsatzgröße. Sein Wert ist ein Zertifikat zwischen 0 und 100. Unter der Annahme, dass der Wert von gctimeratio n ist, wird das System nicht mehr als 1/(1+n) Zeit für die Müllsammlung ausgeben.
3.. Parameter im Zusammenhang mit dem CMS -Sammler
• -xx:+useconcmarksweepgc: Die neue Generation verwendet parallele Sammler, während die alte Generation CMS+Seriensammler verwendet.
• -xx: ParallelcmsThreads: Stellen Sie die Anzahl der Threads für CMS ein.
• -xx: cmInitiatingoccUpancyFraction: Stellen Sie fest, wie viel CMS-Sammler nach Verwendung des Altersraums ausgelöst wird.
• -xx: usecmscompactatfulCollection: Stellen Sie fest, ob CMS nach der Abschluss der Müllsammlung einmal abfragen muss
• -xx: cmsfullgcBeForeCompaction: Legen Sie fest, wie oft CMS-Müllsammlung durchgeführt wird, und die Speicherkomprimierung wird durchgeführt.
• -xx:+cmsClassUnloadingNabled: Ermöglicht die Wiederherstellung der Klassenmetadaten
• -xx: cmInitiingPerMoccUpancyFraktion: Wenn das dauerhafte Belegungsverhältnis diesen Prozentsatz erreicht, starten Sie die CMS -Wiederherstellung (vorausgesetzt, -xx:+cmsClassunloadingNabled ist aktiviert)
• -xx: usecmSinitiatingoccupancyonly: bedeutet, dass die CMS-Wiederherstellung nur dann durchgeführt wird, wenn der Schwellenwert erreicht ist.
• -xx:+cmsincrementalMode: Verwenden Sie den inkrementellen Modus, der besser für einzelne CPU geeignet ist. Der inkrementelle Modus wird in der Mitte als verworfen und in JDK9 vollständig entfernt.
4. Parameter im Zusammenhang mit der G1 -Wiederherstellungsperiode
• -xx:+useG1GC: Verwenden Sie die G1-Wiederherstellung
• -xx:+maxgcpausemillis: Stellen Sie die maximale Müllsammlung Pause ein
• -xx:+gcpauseIntervalmillis: Stellen Sie das Pause-Zeitintervall fest.
5. Tlab verwandt
• -xx:+usetlab: TAL-TLAB-Zuordnung einschalten.
• -xx:+printTlab: Drucken Sie Informationen zu TLAB-verwandten Zuordnungsinformationen
• -xx: tlabsize: Setzen Sie die TLAB-Größe
• -xx:+resizetLab: Passen Sie die TLAB-Größe automatisch an
6. Einige andere Parameter
• -xx:+deaktivierenExplicitGC: explizite GC deaktivieren
• -xx:+explicitGcinvokesConcurrent: Verwenden Sie die Parallelität, um explizite GC zu verarbeiten
Die obige JVM -Tomcat -Leistung (empfohlen) ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.