JVM überschreitet die maximale Speicher definiert mit -Xmx

Haben wir eine Java-webapp, dass wir ein Upgrade von Java 1.5.0.19 Java 1.6.0.21

/usr/java/jdk1.6.0_21/bin/java -server -Xms2000m -Xmx3000m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dwg.environment=production -Djava.io.tmpdir=/var/cache/jetty -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=31377 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/webapp -Dprogram.name=run.sh -Djava.endorsed.dirs=/opt/3p/jboss/lib/endorsed -classpath /opt/3p/jboss/bin/run.jar:/usr/java/jdk1.6.0_21/lib/tools.jar org.jboss.Main -c default

Wie Sie sehen können, es sollte preallocate 2 GB heap und max bei 3GB (warum wir preallocate so viel ist, weil diese app ist uralt und schlecht entwickelt, so hat eine Tonne von Dingen zu laden). Das Problem, das wir gesehen haben vor kurzem, nach dem Upgrade auf die 1.6 ist das ab und an mal den Speicher durch die Decke geht. Während die Speicherauslastung ist wahrscheinlich ein app-Problem ist die JVM eine überschreitung der 3GB max setup für heap. Mit top sehe ich:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND    
8449 apache    18   0 19.6g 6.9g 5648 S  4.0 84.8  80:42.27 java             

Also, wie könnte eine JVM mit 3GB heap, 256 MB permgen, und sogar einige overhead verbrauchen 6,9 GB? Bug in der JVM, die würden behoben werden, indem die Aktualisierung auf build #35? Vermissen Sie etwas auf, was in java könnte mit den zusätzlichen Speicher? Nur versuchen, um zu sehen, ob jemand das schon mal gesehen.

Native code-Bibliotheken unterliegen nicht entweder auf dem heap oder permgen Grenzen (für Speicher mit malloc, sagen). Verwenden Sie keine signifikante nativen Bibliotheken?
Die OS-distribution verwenden Sie?
NÖ. Wir verwenden eine Reihe von Java-libs, aber kein native libs.
was ist die tatsächliche java-heap-Größe, wenn der Speicher schießt nach oben?
Da bist du auf Linix, verwenden Sie pmap, um herauszufinden, wo der Speicher eigentlich vor sich geht.

InformationsquelleAutor Benny the Guard | 2012-09-06

Schreibe einen Kommentar