[JAVA] Glassfish Tuning List, die ich vorerst behalten möchte

Dieser Artikel ist der Artikel zum 10. Tag von "Java EE Adventskalender 2016". Tag 9 (vorheriger Tag): @megascus "[Java EE-Webanwendungen modulieren und kombinieren](http://d.hatena.ne.jp/megascus/ 20161209/1481252793) " Tag 11 (morgen): @yyYank

Einführung

Es ist anderthalb Jahre her, seit ich Java EE gestartet habe. Ich hatte die Gelegenheit, die Leistungsoptimierung von Glassfish während der Entwicklung zu untersuchen, daher werde ich zusammenfassen, was ich damals untersucht habe.

Glassfish (und andere Anwendungsserver) ist standardmäßig "entwicklungsoptimiert". In Bezug auf die automatische Bereitstellungsfunktion, das dynamische Neuladen und die JVM geben wir dem schnelleren ** "Start" ** Vorrang vor dem schnelleren ** "Ausführen" **. Während diese Funktionen während der Entwicklungsphase sehr nützlich sind, können sie während der Produktionsphase einen Leistungsengpass darstellen.

Es ist wichtig zu wissen, wie Glassfish optimiert wird, um einen besseren Service zu bieten und um Ihre Einstellungen für Ihre Produktionsumgebung zu optimieren.

Dieses Mal werde ich die grundlegende Leistungsoptimierung von Glassfish erläutern.

** Hinweis: Die Optimierung während der Entwicklung wird nicht empfohlen und macht keinen Sinn. Die Entwicklung wird sich verlangsamen. ** ** **


Die umgebungsabhängigen Parameter sind wie folgt definiert.

Pfad Bedeutung
<glassfish> Pfad, auf dem Glassfish installiert ist
<domain-name> Zu optimierender Domainname

Auch, wenn Sie der Einstellungsdatei Einstellungen hinzufügen möchten

hinzufügen


<!--Zusätzliche Einstellungen-->

Wenn Sie die Einstellungen ändern möchten

Vorher ändern


<!--Einstellungen vor Änderung-->

Nach der veränderung


<!--Einstellungen nach Änderung-->

Es wird vertreten durch.

Arten der Abstimmung

Es gibt drei Hauptarten der Abstimmung.

  1. JVM-Abstimmung
  2. Glassfish Tuning
  3. Programmabstimmung

** 1. JVM-Tuning ** ist die Idee von "Lasst uns die Leute beschleunigen, die Glassfish überhaupt betreiben". Es kann auf andere Java-Programme angewendet werden. ** 2. Glassfish Tuning ** optimiert buchstäblich die Einstellungen von Glassfish selbst, um es zu beschleunigen. ** 3. Programmoptimierung ** dient zur Optimierung des von Glassfish auszuführenden Programms. Wir werden versuchen, die Arbeit zu beschleunigen, indem wir speichereffizienteren Code und Techniken voll ausnutzen. In diesem Artikel nicht behandelt.

JVM-Abstimmung

Lassen Sie uns zunächst über die Optimierung der JVM nachdenken. Starten Sie nach dem Einstellen die Zieldomäne neu. Die JVM-Einstellungen beim Starten von Glassfish werden in der Datei " / domain / <Domänenname> / config / domain.xml" beschrieben. In der Datei

domain.xml


<java-config ...>
 <jvm-options>..</jvm-options>
 <jvm-options>..</jvm-options>
 <jvm-options>..</jvm-options>
</java-config>

Ich denke, es gibt einen Teil. Dies ist die Option, die beim Start von Glassfish an die JVM übergeben wird.

1. Im Servermodus arbeiten

Vorher ändern


<jvm-options>-client</jvm-options>

Nach der veränderung


<jvm-options>-server</jvm-options>

Im Folgenden finden Sie den Unterschied zwischen Servermodus und Clientmodus. Referenz - Reale Unterschiede zwischen "Java-Server" und "Java-Client"?

2. Geben Sie das Protokoll der Garbage Collection aus

hinzufügen


<jvm-options>-verbose:gc</jvm-options> <!--Aktivieren Sie die GC-Protokollierung-->
<jvm-options>-XX:+PrintGCDetails</jvm-options> <!--Detailliertere Ausgabe-->
<jvm-options>-Xloggc:/path/to/logfile.log</jvm-options> <!--Ausgabe in Datei-->

Bitte setzen Sie das Protokollausgabeziel auf \ . Wenn Sie ein Speicherproblem haben oder herausfinden möchten, ob Ihnen genügend Speicher zugewiesen ist, überprüfen Sie das Protokoll auf verdächtiges Verhalten in Ihrer Speicherbereinigung. Referenz-Garbage Collection: Eine kurze Erklärung und Forschungsmethode für GC (Garbage Collection)

Wenn Sie detailliertere Informationen zu GC erhalten möchten, lesen Sie bitte die folgenden Informationen. Ergänzung - Eine Zusammenfassung der GC-Optionen von Java.

3. Deaktivieren Sie System # gc ()

hinzufügen


<jvm-options>-XX:+DisableExplicitGC</jvm-options>

Die Nachteile der manuellen Ausführung von System # gc () finden Sie unter der folgenden URL. Referenzverteilung von WebSphere: Teil 5 "Running System # gc ()"

4. Ändern Sie den dem Heap-Bereich zugewiesenen Speicher

Vorher ändern


<jvm-options>-Xmx512m</jvm-options>

Standardmäßig ist die Zuweisung von 512 MB festgelegt. Wie viel Speicher zugewiesen wird, wird durch Auslastungstest und Speicherbereinigungsprotokoll optimiert. Wenn Sie sich jedoch nicht sicher sind, setzen Sie den Wert auf "Vorerst bis zu diesem Punkt zulassen". Wenn es kein Problem gibt, stellen Sie es auf "2 GB".

Nach der veränderung


<jvm-options>-Xms2048m</jvm-options>
<jvm-options>-Xmx2048m</jvm-options>

"-Xms" steht für den Anfangswert und "-Xmx" für den Maximalwert. Es wird jedoch empfohlen, diese abzugleichen. Wenn der Anfangswert und der Maximalwert nicht übereinstimmen, erfolgt eine unnötige Zuordnungsverarbeitung. Wenn es kein besonderes Problem gibt, lassen Sie uns übereinstimmen. Ich werde unten eine detailliertere Referenz-URL für die Speicheroptimierung veröffentlichen. Wenn Sie interessiert sind, lesen Sie es bitte und fügen Sie die entsprechenden Einstellungen hinzu. Referenz-JVM-Optimierung

Es ist möglich, dass der Heap-Bereich aufgrund häufiger GC erweitert wurde, das Problem ist jedoch nicht behoben. Beachten Sie, dass dies möglicherweise ein Problem mit dem Programm der Anwendung ist, die Sie ausführen. Siehe unten für Details Ergänzung --- 9. Durch Erhöhen der Heap-Größe wird das Speicherproblem behoben


Wenn Sie tiefer in die Abstimmung der JVM eintauchen, gibt es kein Ende, also werde ich es hier beenden. Wenn Sie interessiert sind, überprüfen Sie es bitte.

Glassfish Tuning

Wir werden Honmaru und Glassfish stimmen. Sie können die Einstellungen über die Verwaltungskonsole ändern (localhost: 4848). Wir empfehlen jedoch, einen Befehl zu verwenden, mit dem Sie die Prozesse als Skript organisieren können. Wenn Sie es als Skript speichern, müssen Sie die Einstellungen nicht jedes Mal ändern, wenn Sie den Server einrichten.

Im Folgenden verwenden wir den Befehl "asadmin", der sich in " / bin / asadmin" befindet.

1. Deaktivieren Sie die automatische Bereitstellung

$ ./asadmin set server.admin-service.das-config.autodeploy-enabled=false`

Es ist eine praktische Funktion zur automatischen Bereitstellung, die jedoch während der Produktionsphase nicht benötigt wird. Schalten Sie sie daher aus.

2. Deaktivieren Sie das dynamische Nachladen

$ ./asadmin set server.admin-service.das-config.dynamic-reload-enabled=false

Das dynamische Neuladen ist eine Funktion, die Änderungen in der Anwendung automatisch widerspiegelt, ohne den Server neu zu starten. Es ist sehr praktisch, aber wenn es aktiviert ist, sucht Glassfish in regelmäßigen Abständen nach Änderungen. Schalten Sie es aus, um die Leistung zu verbessern. Standardmäßig wird die Überprüfung alle 2 Sekunden durchgeführt. Wenn Sie es nicht ausschalten möchten, aber einen Leistungsgewinn erzielen möchten, stellen Sie dieses Intervall länger ein.

Beim Ändern des Intervalls auf 1 Minute


$ ./asadmin set server.admin-service.das-config.dynamic-reload-poll-interval-in-seconds=60

3. Kompilieren Sie die JSP vor

$ ./asadmin set server.admin-service.das-config.autodeploy-jsp-precompilation-enabled=true

Verbessern Sie die Leistung, indem Sie JSP (Java Server Pages) vorkompilieren.

4. Ziehen Sie die Protokollstufe fest

$ ./asadmin set-log-levels <logger-name>=WARNING

Das Exportieren einer großen Anzahl von Protokollen führt zu einer schlechten Leistung. Grundsätzlich reicht es in der Produktionsphase aus, Protokolle mit der Stufe WARNING oder höher zu haben. Wenn also kein Problem vorliegt, setzen wir die Protokollstufe des Loggers auf WARNING. (Sie können Logger und ihre Protokollstufen mit dem Befehl ./asadmin list-log-Ebenen auflisten.)

** Achtung: Es ist sicher, viele Protokolle auszuspucken, wenn das System nicht stabil ist, z. B. zu Beginn des Betriebs **

5. Aktivieren Sie genStrAsCharArray

Die Option genStrAsCharArray ist eine Option, die eine Zeichenfolge (String) als Array von Zeichen (char) behandelt. Wenn Sie es als ein Array von Zeichen behandeln, sparen Sie Speicher und reduzieren den Overhead. Diese Abstimmung wird als "Mikrooptimierung" verspottet, aber wenn sich Staub ansammelt ...

Fügen Sie den Einstellungsteil hinzu, der sich auf das JSP-Servlet in " / Domains / <Domänenname> / default-web.xml" bezieht.

hinzufügen


<servlet>
    <servlet-name>jsp</servlet-name>
    ...
    ...
    <!--Zusätzlicher Teil-->
    <init-param>
       <param-name>genStrAsCharArray</param-name>
       <param-value>true</param-value>
    </init-param>
    <!-- /Zusätzlicher Teil-->
</servlet>

abschließend

Es ist ein Jahr seit dem letzten Java EE Adventskalender 2015 vergangen, an dem ich zum ersten Mal teilgenommen habe. Ich mache mir Sorgen um die Zukunft, zum Beispiel, dass Oracle das Ende der Java EE-Entwicklung riecht, aber ich möchte, dass Java EE sein Bestes gibt, ohne den Gegenwind zu verlieren.

Recommended Posts

Glassfish Tuning List, die ich vorerst behalten möchte
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ich möchte, dass Sie Scala vorerst als besseres Java verwenden
Befehl, um Docker vorerst zu verwenden
Ich möchte die Liste der Klassen unter dem Paket rekursiv durchsuchen
Ich möchte mehrere Rückgabewerte für das eingegebene Argument zurückgeben
Java14 kam heraus, also habe ich vorerst versucht aufzunehmen
[Java] Ich möchte überprüfen, ob die Elemente in der Liste null oder leer sind. [Collection Utils]
Einführung in Java zum ersten Mal # 2
[Erstes Java] Machen Sie etwas, das vorerst mit Intellij funktioniert
Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
Ich möchte den Inhalt der Absicht var_dump
Ich habe zum ersten Mal versucht, Docker zu berühren
Installieren Sie vorerst Amazon Corretto (Vorschau)
Ich möchte nur die Zeit aus Zeittypdaten abrufen ...! [Strftime] * Zusätzliche Hinweise
Ich möchte nach dem Dezimalpunkt abschneiden
Verwenden Sie vorerst eine externe Java-Bibliothek
Führen Sie jetzt Dataflow, Java, Streaming aus
Ich möchte den Wert in Ruby erhalten
Vorläufiges Memo beim Erstellen der CentOS 6-Serie mit VirtualBox
7 Dinge, die du behalten sollst, damit es kein verdammter Code wird
Ich möchte eine TraceId in das Protokoll einbetten
Gelernter Stream (Ich möchte List in Map <Integer, List> konvertieren)
Ich möchte den Bereich anhand des monatlichen Abschlusses beurteilen
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte den Dunkelmodus mit der SWT-App verwenden
Versuchen Sie vorerst, Spring Cloud Config auszuführen
Ich möchte die Hauptmethode mit Reflektion aufrufen
[Grober Kommentar] Ich möchte die Zupfmethode heiraten
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte die Protokollausgabe unter Android vereinfachen
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Wie man Kotlin zum ersten Mal studiert ~ Teil 2 ~
Wie man Kotlin zum ersten Mal studiert ~ Teil 1 ~
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
Ich möchte die maximale Dateigröße für das Hochladen von Dateien für jede URL in Spring Boot steuern
Implementierung einer starken API für "Ich möchte ~~ auf dem Bildschirm anzeigen" mit einfachem CQRS
Ich möchte die Videowiedergabezeit (HH: MM: SS) auf die Anzahl der Sekunden einstellen und umgekehrt
[Anfänger] Ich möchte die Migrationsdatei ändern.
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
[Rails] [Bootstrap] Ich möchte die Schriftgröße entsprechend ändern
Hallo Welt mit Ruby-Erweiterungsbibliothek vorerst
(´-`) .. oO (Ich möchte die Standardausgabe" Hallo "leicht finden.
Ich möchte Tomcat auf den Server bringen und die Anwendung starten
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich möchte eine Liste mit Kotlin und Java erstellen!