Dieser Artikel analysiert die Gründe, warum der Überlauf des Java -Programmspeichers detaillierter ist. Teilen Sie es für alle für Ihre Referenz. Die Einzelheiten sind wie folgt:
Ein Online -System, das über Java.lang.outofMemoryError gemeldet wurde. Ich habe das vor langer Zeit und ich erinnere mich jetzt nicht daran, dass es wirklich eine sehr interessante Frage ist. Erstens ist die erste Reaktion, um -xx:+printgCDetails -Parameter hinzuzufügen, um die spezifischen GC -Protokolle zu betrachten. Da das Programm jedoch von Tomcat gestartet wird, befürchte ich, dass zu viele Dinge in der Innenseite eingefasst sind.
Schauen wir uns dann die Ursache dieses Fehlers an.
Der vollständige Name des Permgen -Raums ist ein dauerhafter Bereich der Generation, der sich auf den dauerhaften Erhaltungsbereich bezieht Verschiedene Haufen Regionen. Plätze vor -Compile auf JSP. Wenn Sie unter Ihrer Web -App eine große Anzahl von Jar -Teilen mit drittem Teil verwenden, überschreitet die Größe die Standardgröße (4M) des JVM, dann wird diese Fehlermeldung generiert.
Dann erhöhen wir die anfängliche Speichergröße von Permgen:
Fügen Sie am Anfang von Linux am Anfang der Catalina.sh -Datei hinzu: CODE CODE CODE wie folgt: java_opts = "-xms1024m -xmx1024m -xx: permsize = 256m -xx: maxperms = 256m" "" "
Plus zu Beginn der Datei der Catalina.bat unter Windows: Code Code wie folgt kopieren: Setzen Sie java_opts = -xms1024m -xmx1024m -xx: permsize = 256m -xx: maxpermssize = 256 m
Anschließend verwenden wir immer noch den visuellen Speicher, um Tools anzuzeigen, um spezifische Probleme zu finden. Das bevorzugte Tool für JDK6 ist natürlich seine eigenen Werkzeuge. Dieses Mal stieß ich auf ein weiteres seltsames Problem, dh der Tomcat -Prozess konnte nicht gefunden werden, nachdem das Analysewerkzeug geöffnet wurde (JRE wurde danach als gestartet und sollte ausreichen, um es in JDK zu ändern).
Da die Region nicht erlaubt ist, kann ich remote verbinden und JMX einfach öffnen.
Fügen Sie wie im obigen den Anfang der Java_Opts der Catalina.sh.sh oder Catalina.bat -Datei wie folgt den Kopiercode wie folgt hinzu: -djava.rmi.server.hostname = 192.168.1.101 -dcom.management.jmxremote.port = 900 0-- dcom.sun.management.jmxremote.ssl = false -dcom.sun.management.jmxremote.authenticate = false
Überprüfen Sie nach Beginn des Programms, ob der Port korrekt geöffnet wird, um sicherzustellen, dass die Fernbedienung angeschlossen werden kann.
Ich bin faul und schalte authentifiziert. Diese Einstellungen sind auf meinem lokalen PC wirksam, aber es reicht nicht auf dem Server. Öffnen Sie JvisualVM, klicken Sie auf Datei-> JMX-Verbindung hinzufügen und dann Localhost: 1000 hinzufügen und eine Verbindung herstellen.
Nach dem vorherigen Programm habe ich mich auf die Situation von Perm konzentriert. Es kann sein, dass die Größe des Perm -Speichers vorher nicht wirkte, da die Standardinitialisierung von Perm 16 m und das Maximum 64 m beträgt und die tatsächliche Besatzungsmenge dieses Problems tatsächlich verursachen kann. . Wenn Sie das Problem weiter finden müssen, können Sie auch Btrace verwenden, um einen Ort anzusehen, an dem eine bestimmte Methode aufgerufen wird. Dies kann positionieren, ob bestimmte Methoden wie erwartet ausgeführt werden.
Es ist zu hoffen, dass dieser Artikel für Java -Programmdesign aller hilfreich ist.