1. Sammlung von Problemen der Tomcat -Speichereinstellungen
Wenn Sie Java -Programme verwenden, um eine große Menge an Daten aus der Datenbank abzufragen oder ein JAR -Paket nach Anwendungsservern (wie Tomcat, JBoss, Weblogic) zu laden. Die Ausnahme von java.lang.outofMemoryError wird erscheinen. Dies wird hauptsächlich durch den unzureichenden Speicher auf dem Anwendungsserver verursacht. Diese Ausnahme hat häufig die folgenden Situationen (die Tomcat -Umgebung als Beispiel, andere Webserver wie JBoss, Weblogic usw. sind gleich):
1. Java.lang.outofMemoryError: Permgen -Raum
Der vollständige Name des Permgen -Raums ist der dauerhafte Raum der Generation, der sich auf den dauerhaften Speicherbereich des Speicherausschusses für den Speicherplatz bezieht: Permgen -Raum. Aus Sicht der Text ist es Speicherüberlauf, und die Lösung besteht darin, den Speicher zu erhöhen. Warum überflutet Speicher? Dies liegt daran, dass dieser Speicher hauptsächlich von der JVM in den Klassen- und Meta -Informationen gespeichert wird. Die Klasse wird in den Bereich des Permgen -Raums platziert, wenn er geladen ist. Es unterscheidet sich von dem Haufenbereich, in dem die Instanz gespeichert wird. GC (Müllsammlung) wird den Permgen -Raum während des Hauptprogramms nicht beseitigt. Wenn Ihre App viel Unterricht lädt, ist es sehr wahrscheinlich, dass ein Permgen -Space -Fehler auftritt. Dieser Fehler ist üblich, wenn der Webserver den JSP vorkommt. Wenn Sie eine große Anzahl von Gläser mit Drittanbietern unter Ihrer Web-App verwenden, überschreitet die Größe die Standardgröße von JVM (4M), dann wird diese Fehlermeldung generiert.
Lösung: Setzen Sie die Maxpermsize -Größe manuell ein
A. Wenn Tomcat im Fledermodus gestartet wird, sind die folgenden Einstellungen:
Ändern Sie tomcat_home/bin/catalina.sh
Fügen Sie die folgende Zeile mit Catalina_Base: $ Catalina_Base "hinzu:" Echo ":
Java_opts = " -server -xx: permSize = 64m -xx: maxpermSize = 128m
B. Wenn Tomcat als Windows -Dienst registriert und in Diensten gestartet wird, muss der entsprechende Schlüsselwert in der Registrierung geändert werden.
Öffnen Sie die Registrierung und finden Sie das Verzeichnis HKEY_LOCAL_MACHINE/SOFTWARE/APache Software Foundation/Procrun 2.0/Htfty/Parameter/Java. Das rot markierte (z. B. htfty) in der Verzeichnisadresse muss gemäß verschiedenen Situationen geändert werden und den Tomcat -Dienst als Name des Windows -Dienstes registrieren. Sie können die JVMMS- und JVMMX -Elemente sehen, bei denen JVMMS die kleinsten Speicherverbrauchsparameter festlegt und JVMMX die größten Speicherverbrauchsparameter festlegt. Stellen Sie die Werte von JVMMS- und JVMMX -Elementen fest und starten Sie den Tomcat -Server neu, um wirksam zu werden.
Empfehlung: Verschieben Sie dieselbe JAR-Datei der Drittanbieter in das Verzeichnis Tomcat/Shared/Lib, um die wiederholte Speicherverwendung von JAR-Dokumenten zu verringern.
2. Java.lang.outofMemoryError: Java Heap Space
Die Einstellungen des JVM -Heaps beziehen sich auf die Einstellungen des Speicherplatzes, den die JVM während des Java -Programmbetriebs vorstellen kann. Wenn der JVM startet, wird automatisch den Wert der Haufengröße festgelegt. Sein Anfangsraum (d. H. -xms) beträgt 1/64 des physischen Speichers, und der maximale Speicherplatz (-xmx) beträgt 1/4 des physischen Gedächtnisses. Sie können die -xmn -xms -xmx und andere vom JVM bereitgestellte Optionen verwenden, um sie festzulegen. Die Größe der Haufengröße ist die Summe der jungen Generation und der festen Gattung. Diese Ausnahmemeldung wird geworfen, wenn in 98% der Zeit für GC verwendet wird und die verfügbare Haufengröße weniger als 2% beträgt.
Lösung: Haufensgröße manuell festlegen
A. Wenn Tomcat im Fledermodus gestartet wird, sind die folgenden Einstellungen:
Ändern Sie tomcat_home/bin/catalina.sh
Fügen Sie die folgende Zeile mit Catalina_Base: $ Catalina_Base "hinzu:" Echo ":
Java_opts = " -Server -xms800m -xmx800m -xx: maxnewSIZE = 256m"
B. Wenn Tomcat als Windows -Dienst registriert und in Diensten gestartet wird, muss der entsprechende Schlüsselwert in der Registrierung geändert werden.
Öffnen Sie die Registrierung und finden Sie das Verzeichnis HKEY_LOCAL_MACHINE/SOFTWARE/APache Software Foundation/Procrun 2.0/Htfty/Parameter/Java. Das rot markierte (z. B. htfty) in der Verzeichnisadresse muss gemäß verschiedenen Situationen geändert werden und den Tomcat -Dienst als Name des Windows -Dienstes registrieren. Sie können die JVMMS- und JVMMX -Elemente sehen, bei denen JVMMS die kleinsten Speicherverbrauchsparameter festlegt und JVMMX die größten Speicherverbrauchsparameter festlegt. Stellen Sie die Werte von JVMMS- und JVMMX -Elementen fest und starten Sie den Tomcat -Server neu, um wirksam zu werden.
Tipp: Die maximale Haufengröße sollte 80% des verfügbaren physischen Speichers nicht überschreiten. Setzen Sie im Allgemeinen die Optionen -xms und -xmx auf die gleiche, während -xmn 1/4 des -xmx -Werts ist.
2. Tomcat selbst kann nicht direkt auf dem Computer ausgeführt werden, und es muss sich auf das Betriebssystem basierend auf der Hardware und einer virtuellen Java -Maschine verlassen. Wenn das Java -Programm gestartet wird, verteilt der JVM der Anwendung einen anfänglichen Speicher und einen maximalen Speicher. Dieser anfängliche Speicher und der maximale Speicher beeinflussen die Leistung des Programms bis zu einem gewissen Grad. Wenn beispielsweise eine Anwendung den maximalen Speicher verwendet, muss die JVM zuerst die Müllsammlung durchführen und einige besetzte Speicher veröffentlichen. Wenn Sie beim Start den anfänglichen Speicher und den maximalen Speicher von Tomcat anpassen möchten, müssen Sie ihn dem JVM anmelden. Im Allgemeinen können Java -Programme beim Ausführen den anfänglichen Speicher und den maximalen Speicher der Anwendung über -xms -xmx anpassen: Die Größen dieser beiden Werte werden im Allgemeinen entsprechend den Anforderungen festgelegt. Die Initialisierungshaufengröße führt die Speichergröße aus, die die virtuelle Maschine beim Start an das System beantragt. Im Allgemeinen ist dieser Parameter nicht wichtig. Einige Anwendungen belegen jedoch schnell mehr Speicher unter großen Lasten. Zu diesem Zeitpunkt ist dieser Parameter sehr wichtig. Wenn der verwendete Speicher auf klein ist, wenn die virtuelle Maschine gestartet wird und in diesem Fall viele Objekte initialisiert werden, muss die virtuelle Maschine den Speicher wiederholt erhöhen, um die Verwendung zu erfüllen. Aus diesem Grund setzen wir im Allgemeinen -xms und -xmx die gleiche Größe, und der Maximalwert des Haufens wird durch den vom System verwendeten physischen Speicher begrenzt. Im Allgemeinen verwenden Anwendungen mit großen Datenmengen anhaltende Objekte, und die Speicherverwendung kann schnell wachsen. Wenn der von der Anwendung erforderliche Speicher den Maximalwert des Heaps überschreitet, fordert die virtuelle Maschine den Speicherüberlauf auf und führt zu dem Absturz des Anwendungsdienstes. Daher wird im Allgemeinen empfohlen, den Maximalwert des Haufens auf 80% des Maximalwerts des verfügbaren Speichers festzulegen.
Tomcat kann standardmäßig den Speicher verwenden, ist 128 MB. In größeren Anwendungsprojekten reicht dieser Speicher nicht aus und muss erhöht werden. Es gibt verschiedene Möglichkeiten zu wählen:
Die erste Methode:
Fügen Sie unter Windows in der Datei /bin/catalina.bat, Unix vor der Datei /bin/catalina.sh, die folgenden Einstellungen hinzu:
Java_opts = '-xms 【initialisieren Sie die Speichergröße】 -xmx 【Maximaler Speicher, der verwendet werden kann】'
Die Werte dieser beiden Parameter müssen erhöht werden. Zum Beispiel:
Java_opts = ' -xms256m -xmx512m'
Dies bedeutet, dass der Initialisierungsspeicher 256 MB und der maximale Speicher, der verwendet werden kann, 512 MB beträgt.
Die zweite Methode: Legen Sie den Variablennamen in der Umgebungsvariablen ein: java_opts variabler Wert: -xms512m -xmx512m
Die dritte Methode: Die ersten beiden Methoden richten sich an die Situation, in der sich Catalina.bat im Bin -Verzeichnis befindet (z. Zu diesem Zeitpunkt kann die folgende Methode verwendet werden. Natürlich ist diese Methode auch die allgemeinste Methode: Öffnen Sie Tomcathome // bin // tomcat5w.exe, klicken Sie auf die Registerkarte Java, und Sie werden feststellen, dass es zwei Elemente gibt: anfänglicher Speicherpool und maximaler Speicherpool. Initial Speicherpool Dies ist die Speichergröße der Initialisierungseinstellung. Maximaler Speicherpool Dies ist die maximale Speichergröße. Drücken Sie nach der Einstellung die Einstellung OK und starten Sie Tomcat neu. Sie werden feststellen, dass sich der Speicher für JVM in Tomcat geändert hat.
Eine andere Sache, die zu berücksichtigen ist, ist der von Java bereitgestellte Mülleimermechanismus. Die Haufengröße der virtuellen Maschine bestimmt die Zeit und Frequenz der virtuellen Maschinenausgaben für das Sammeln von Müll. Die akzeptable Geschwindigkeit der Müllsammlung hängt mit der Anwendung zusammen und sollte durch Analyse der Zeit und Häufigkeit der tatsächlichen Müllsammlung angepasst werden. Wenn die Haufengröße groß ist, ist die vollständige Müllsammlung langsam, aber die Frequenz wird reduziert. Wenn Sie die Haufengröße mit den Speicheranforderungen übereinstimmen, ist die vollständige Sammlung schnell, aber häufiger. Der Zweck der Änderung des Haufens besteht darin, die Zeit der Müllsammlung zu minimieren, um die Verarbeitung von Kundenanfragen innerhalb einer bestimmten Zeit zu maximieren. Während des Benchmarking muss die Haufengröße so groß sein, um die beste Leistung zu gewährleisten, um sicherzustellen, dass die Müllsammlung während des gesamten Benchmarking -Prozesses nicht erfolgt. Wenn das System viel Zeit damit verbringt, Müll zu sammeln, reduzieren Sie die Haufengröße. Eine komplette Müllsammlung sollte 3-5 Sekunden nicht überschreiten. Wenn die Müllsammlung zum Engpass wird, muss die Größe der Generation angegeben werden, die detaillierte Ausgabe der Müllsammlung überprüft und die Auswirkungen der Müllsammlungsparameter auf die Leistung untersucht werden. Im Allgemeinen sollten Sie 80% des physischen Speichers als Heap -Größe verwenden. Denken Sie beim Hinzufügen des Prozessors daran, den Speicher zu erhöhen, da Zuordnungen parallel durchgeführt werden können, während die Müllsammlung nicht parallel ist.
Eine Sache zu beachten: Es wird empfohlen, die Differenz zwischen dem höchsten Wert und dem niedrigsten Wert einzugrenzen, sonst wird viel Speicher verschwendet. Der niedrigste Wert wird erhöht und der höchste Wert kann nach Belieben festgelegt werden, muss jedoch auf dem tatsächlichen physischen Speicher beruhen. Wenn die Speichereinstellung beispielsweise zu groß ist, ist der maximale Speicher festgelegt. Wenn jedoch kein 512 m verfügbarer Speicher vorhanden ist, kann Tomcat nicht gestartet werden. Es kann eine Situation geben, in der der Speicher vom System recycelt und den Prozess beendet wird.
Die obige Methode zur Implementierung von Tomcat -Speicherüberlauf und Größenanpassung ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.