Heim  >  Artikel  >  类库下载  >  java.lang.OutOfMemoryError Behandlungsfehler

java.lang.OutOfMemoryError Behandlungsfehler

高洛峰
高洛峰Original
2016-10-09 09:01:491493Durchsuche

Grund: Die häufigsten sind wie folgt:

1. Die in den Speicher geladene Datenmenge ist zu groß, z. B. weil zu viele Daten auf einmal aus der Datenbank abgerufen werden >2. Der Verweis auf das Objekt wird nach der Verwendung nicht gelöscht, sodass die JVM es nicht wiederverwenden kann.

3 Es gibt eine Endlosschleife im Code oder die Schleife generiert zu viele doppelte Objektentitäten ;

Der verwendete Fehler in der Software von Drittanbietern

Der Wert des Startparameters ist zu klein. java.lang.OutOfMemoryError: PermGen-Speicherplatz

2.tomcat:java.lang.OutOfMemoryError: Java-Heap-Speicherplatz

3.weblogic:Ursache der ServletException java.lang.OutOfMemoryError

4.resin:java.lang.OutOfMemoryError

5.java:java.lang.OutOfMemoryError

Lösung; 1. Lösung für Fehler bei der Eingabeaufforderung des Anwendungsservers: Stellen Sie den Speicherwert des Startparameters ausreichend groß ein.

2. Lösung für Fehler, die durch Java-Code verursacht werden: Konzentrieren Sie sich auf die folgenden Punkte:

1) Überprüfen Sie, ob der Code Endlosschleifen oder rekursive Aufrufe enthält.

2) Überprüfen Sie, ob es eine große Schleife gibt, die wiederholt neue Objektentitäten generiert.

3) Überprüfen Sie, ob eine Abfrage vorhanden ist, um alle Daten in der Datenbankabfrage abzurufen. Wenn 100.000 Datensätze gleichzeitig in den Speicher abgerufen werden, kann es im Allgemeinen zu einem Speicherüberlauf kommen. Dieses Problem ist relativ versteckt, da weniger Daten in der Datenbank vorhanden waren und es weniger wahrscheinlich zu Problemen kam. Nach dem Online-Gehen waren mehr Daten in der Datenbank vorhanden, und eine einzelne Abfrage konnte zu einem Speicherüberlauf führen. Versuchen Sie daher, Paging für Datenbankabfragen zu verwenden.

4) Überprüfen Sie, ob Sammlungsobjekte wie List und MAP nach der Verwendung nicht gelöscht werden. Sammlungsobjekte wie List und MAP verfügen immer über Verweise auf die Objekte, sodass diese Objekte von GC nicht recycelt werden können.

Fall: 1. Wenn der Ruhezustand Daten abfragt, werden zu viele Daten auf einmal abgefragt. Später wurde der Code dieses Teils angepasst und jedes Mal nur die angegebene Datenmenge abgerufen, wodurch das Problem erfolgreich gelöst wurde. 2. Beim Stresstest tritt ein OutOfMemoryError auf und es wird festgestellt, dass die Sitzungsressourcen nicht freigegeben wurden. Es ist am besten, die Sitzungsressourcen über die invalidate()-Methode der Sitzung freizugeben. 3. Im Programm erscheint eine Endlosschleife. 4. Beim Bereitstellen und Ausführen von Tomcat tritt ein OutOfMemoryError auf. Erhöhen Sie den Speicherparameterwert, um dieses Problem zu lösen.

java.lang.OutOfMemoryError in Tomcat: Java-Heap-Space-Ausnahmebehandlung

1 , Heap-Größe Die Einstellung des JVM-Heaps bezieht sich auf die Einstellung des Speicherplatzes, den die JVM zuweisen und verwenden kann, wenn das Java-Programm ausgeführt wird. Die JVM legt den Wert der Heap-Größe automatisch fest (d. h. -Xms) beträgt 1 des physischen Speichers, der maximale Speicherplatz (-Xmx) beträgt 1/4 des physischen Speichers. Sie können die Option -Xmn -Xms -Xmx und andere von der JVM bereitgestellte Optionen verwenden, um dies festzulegen. Die Heap-Größe ist die Summe aus Young Generation und Tenured Generation. Tipp: In der JVM wird diese Ausnahmemeldung ausgegeben, wenn 98 % der Zeit für GC verwendet werden und die verfügbare Heap-Größe weniger als 2 % beträgt. Tipp: Die maximale Heap-Größe sollte 80 % des verfügbaren physischen Speichers nicht überschreiten. Im Allgemeinen sollten die Optionen -Xms und -Xmx auf den gleichen Wert gesetzt werden und -Xmn sollte 1/4 des -Xmx-Werts betragen.

2. Lösung: Legen Sie die Heap-Größe manuell fest, ändern Sie TOMCAT_HOME/bin/catalina.sh und fügen Sie die folgende Zeile zu „echo „Using CATALINA_BASE: $CATALINA_BASE““ hinzu: JAVA_OPTS="-server -Xms800m -Xmx800m -XX :MaxNewSize=256m"

java.lang.OutOfMemoryError in Tomcat: PermGen-Space-Ausnahmebehandlung

1. PermGen-Space Der vollständige Name Der PermGen-Speicherplatz bezieht sich auf den permanenten Speicherbereich, der hauptsächlich von der JVM zum Speichern von Klassen- und Metainformationen verwendet wird, wenn er vom Loader geladen wird. Es und der Heap, in dem Klasseninstanzen gespeichert sind (Instance) Verschiedene Bereiche, GC (Garbage Collection) bereinigt den PermGen-Speicherplatz während der Ausführung des Hauptprogramms nicht. Wenn Ihre Anwendung also viele CLASS enthält, ist ein PermGen-Speicherplatzfehler wahrscheinlich Dieser Fehler tritt häufig auf, wenn der Webserver bei der Vorkompilierung eine JSP-Verarbeitung durchführt. Wenn Ihre WEB-APP eine große Anzahl von Jars von Drittanbietern verwendet und deren Größe die Standardgröße des JVM (4 MB) überschreitet, wird diese Fehlermeldung generiert.

Lösung: Legen Sie die MaxPermSize-Größe manuell fest und ändern Sie TOMCAT_HOME/bin/catalina.sh. Fügen Sie die folgende Zeile zu „echo „Using CATALINA_BASE: $CATALINA_BASE““ hinzu: JAVA_OPTS="-server -XX:PermSize=64M -XX :MaxPermSize=128m Empfehlung: Verschieben Sie dieselben JAR-Dateien von Drittanbietern in das Verzeichnis tomcat/shared/lib, um die wiederholte Speichernutzung von JAR-Dateien zu reduzieren

Ausnahmebehandlung von java.lang.OutOfMemoryError in Weblogic

Fehlermeldung: „Ursache der ervletException java.lang.OutOfMemoryError“

Lösung: Passen Sie CommEnv in bea/weblogic/common an Mittlere Parameter: sun  if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode  set JAVA_VM=-client  set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m  set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none  gehe fort  : sun_prod_mode  set JAVA_VM=-server set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m gehe zu fort

java.lang.OutOfMemoryError: PermGen-Speicherausnahmebehandlung, wenn Eclipse Jboss ausführt

Wenn die Zeit zu lang ist, kann es beim Ausführen von Jboss in Eclipse manchmal zu einem java.lang.OutOfMemoryError: PermGen-Speicherplatzfehler kommen. Hier ist eine Lösung:

1) Klicken Sie auf neben dem Debug-Symbol kleiner Pfeil;

2) Klicken Sie auf den Menüpunkt „Debug-Konfigurationen...“

3) Wählen Sie „JBoss v4.2 at localhost“ unter der Baumstruktur „Generischer Server“. ;

4) Klicken Sie rechts auf die Registerkarte „Argumente“ und fügen Sie „VM-Argumente“ hinzu:

-Dprogram.name=run.bat -Djava.endorsed.dirs="D: /JBoss405 /bin/../lib/endorsed" -Xms128m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m

5) Wenn Sie sich im Befehlszeilenmodus befinden oder auf „run.bat“ klicken Um JBoss direkt auszuführen, müssen Sie die JVM-Optionen in der Datei bin/run.conf ändern. Suchen Sie den Abschnitt JAVA_OPTS="-Xms128m -Xmx512m..." und fügen Sie dann "-XX:PermSize=64m -XX:" hinzu. am Ende. MaxPermSize=256m". Speichern und alles ist in Ordnung.

6) Hinweis: Zahlen wie 128, 512, 64 und 256 können entsprechend der Konfiguration Ihrer Maschine angepasst werden, und klicken Sie dann auf „Übernehmen“.

Ausnahmebehandlung von java.lang.OutOfMemoryError unter Resin

Ursache: Dieser Fehler tritt im Allgemeinen auf, weil der physische JVM-Speicher zu klein ist. Der standardmäßige maximale Speicher der Java Virtual Machine beträgt nur 64 MB, was während der Entwicklung und beim Debuggen möglicherweise kein Problem darstellt, aber bei weitem nicht den Anforderungen in der tatsächlichen Anwendungsumgebung entspricht, es sei denn, Ihre Anwendung ist sehr klein und hat wenig Zugriff. Andernfalls kann es sein, dass ein java.lang.OutOfMemoryError-Fehler auftritt, nachdem das Programm eine Zeit lang ausgeführt wurde. Daher müssen wir den für Harz verfügbaren Speicher der virtuellen Maschine erhöhen.

Lösung: Ändern Sie die args-Option in /usr/local/resin/bin/httpd.sh, um die Parameter -Xms (anfänglicher Speicher) und -Xmx (maximal nutzbare Speichergröße) hinzuzufügen, die zur Begrenzung verwendet werden können die Physik der JVM-Speichernutzung. Beispiel: args="-Xms128m -Xmx256m" Nach der Einstellung beträgt der anfängliche physische Speicher der JVM 128 m und der maximal nutzbare physische Speicher beträgt 256 m. Diese beiden Werte sollten vom Systemadministrator entsprechend der tatsächlichen Situation des Servers festgelegt werden.

Nachdruck von: http://www.cnblogs.com/cyjch/archive/2012/04/10/2440421.html


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:java int转byte和long转byteNächster Artikel:java 关键字 assert的学习