JVM und Memory-Auslastung - JRun-server nicht mit voller PSPermGen Zuweisung?
Ich versuche zu verstehen, warum sich ColdFusion 9 (JRun) server ist mit dem folgenden Fehler:
java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space?
Der JVM-Argumente sind wie folgt:
-server -Dsun.io.useCanonCaches=false -XX:MaxPermSize=192m -XX:+UseParallelGC -
Hatte ich jconsole ausgeführt wird, wenn der dump passiert und ich bin versucht zu versöhnen, einige Nummern mit der -XX:MaxPermSize=192m
Einstellung oben. Wenn Sie JRun starb, hatte es die folgende Speicherbelegung:
Heap
PSYoungGen total 136960K, used 60012K [0x5f180000, 0x67e30000, 0x68d00000)
eden space 130624K, 45% used [0x5f180000,0x62c1b178,0x67110000)
from space 6336K, 0% used [0x67800000,0x67800000,0x67e30000)
to space 6720K, 0% used [0x67110000,0x67110000,0x677a0000)
PSOldGen total 405696K, used 241824K [0x11500000, 0x2a130000, 0x5f180000)
object space 405696K, 59% used [0x11500000,0x20128360,0x2a130000)
PSPermGen total 77440K, used 77070K [0x05500000, 0x0a0a0000, 0x11500000)
object space 77440K, 99% used [0x05500000,0x0a043af0,0x0a0a0000)
Meine erste Frage ist, dass der dump zeigt die PSPermGen
das problem - er sagt die Summe 77440K, aber es sollte 196608K (basierend auf meinen 192m JVM-argument), richtig? Was vermisse ich hier? Ist dies etwas zu tun mit den anderen nicht-heap-pool - der-Code-Cache?
Ich bin läuft auf einem 32-bit-Maschine, Windows Server 2008 Standard. Ich dachte an die Erhöhung der PSPermGen
JVM-argument, aber ich möchte verstehen, warum es nicht zu sein scheinen mit Ihrer aktuellen Zuordnung.
Vielen Dank im Voraus!
InformationsquelleAutor Ciaran Archer | 2010-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen "out of swap space" OOME passiert, wenn die JVM gebeten hat, das Betriebssystem für mehr Speicher und das Betriebssystem nicht in der Lage war, die Anforderung zu erfüllen, weil alle swap (Disk -) Platz ist bereits vergeben. Im Grunde, Sie getroffen habe, eine system-weite "harte" Grenze bei der Menge an virtuellen Speicher, die verfügbar ist.
Dies kann geschehen, ohne Verschulden Ihrer Anwendung oder der JVM. Oder es könnte eine Folge der zunehmenden
-Xmx
etc über Ihr system, die Fähigkeit, Sie zu unterstützen.Gibt es drei Ansätze zur Bewältigung dieser:
Fügen Sie mehr physikalischen Arbeitsspeicher des Systems zu.
Erhöhen Sie die Menge an swap-space auf dem system verfügbar sind; z.B. unter Linux Blick in die Bedienungsanleitung Eintrag für
swapon
und Freunde. (Aber seien Sie vorsichtig, dass das Verhältnis von aktiven virtuellen Speicher auf den physischen Speicher nicht zu groß ... oder das system ist haftet "thrash" und " performance drop durch den Boden.)Reduzieren die Anzahl und Größe der Prozesse auf dem system laufen.
Wenn Sie in dieser situation, weil Sie schon die Erhöhung
-Xmx
gegen andere OOMEs, dann wäre jetzt eine gute Zeit, um die Spur ist die (wahrscheinliche) memory leaks, die die Ursache Ihrer Probleme.Ich war in der Tat ein memory leak! Ich habe geschrieben über meine Erfahrungen hier in der Hoffnung, es könnte helfen, andere: flydillonfly.wordpress.com/2010/08/24/cf-out-of-stack-space
InformationsquelleAutor Stephen C
"ChunkPool::allocate. Out of swap space" bedeutet in der Regel die JVM-Prozess hat Fehler beim reservieren von Speicher für die interne Verarbeitung.
Dies ist in der Regel nicht direkt mit Ihr in die heap-Verwendung, wie es die JVM-Prozess selbst hat keinen Speicher. Überprüfen Sie die Größe des JVM-Prozess in windows. Sie getroffen haben können, eine Obergrenze gibt.
Diesem bug-report gibt auch eine Erklärung.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5004956
Dies ist in der Regel verursacht durch native, nicht-java-Objekte nicht freigegeben werden durch Ihre Anwendung eher als java-Objekte auf dem heap.
Einige Beispiele für Ursachen sind:
Fand ich diesen blog hilfreich bei der Diagnose ein ähnliches problem. http://www.codingthearchitecture.com/2008/01/14/jvm_lies_the_outofmemory_myth.html
Die MaxPermSize legt nur die Obergrenze der PSPermGen, Die JVM ist frei zuordnen weniger. Ist es normal, dass der PermGen fast voll ist, wird die JVM selten erlaubt viel Spielraum gibt. Wenn Sie ein tool wie visual VM gegen Sie Anwendung generiert einen Graphen, der PermGen so können Sie sehen, wie der heap verwaltet, in Echtzeit ich vermute, dass die volle Grenze von PermGen ist nicht vergeben, wie Sie immer der ChunkPool::allocate-Fehler vor, die Ihre Anwendung benötigt 192m von der PermGen
Auch gibt es eine spezielle Fehlermeldung, wenn Sie aus dem PermGen space: Es ist "java".lang.OutOfMemoryError: PermGen space"
OK, so scheint es, dass der PermGen space könnte eigentlich NICHT mein problem sein, trotz es zu zeigen, wie 99% voll in meinem dump? Blutige Hölle. Weiß jemand, wie misst man die "swap" - Raum mit windows perfmon-Zähler?
InformationsquelleAutor Aaron
Überprüfen Sie Ihre setDomainEnv.cmd (.sh-Datei). es wird drei unterschiedliche Bedingungen auf PermSize
-XX:MaxPermSize=xxxm -XX:PermSize=xxxm. Ändern Sie überall
InformationsquelleAutor Manikandan