2011-06-29 12 views
7

Un Apache Tomcat (Atlassian Confluencia) instancia se inicia el uso de las siguientes opciones de Java:Java utilizando más memoria que la memoria asignada

JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=256m -Djava.awt.headless=true " 

Sin embargo veo que después de la puesta en marcha se come rápidamente a través de la mayor parte del 1 GB de memoria que está disponible en mi servidor virtual.

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
6082 root  19 0 1105m 760m 16m S 0.7 74.2 5:20.51 java 

No debería la memoria consumida en general (+ montón PermGen) mantenerse por debajo de lo que se especifica usando -Xmx? Uno de los problemas que esto está ocasionando es que no puedo cerrar el servidor utilizando el script de apagado, ya que intenta engendrar una JVM con 256 MB de memoria que falla debido a que no está disponible.

+0

Tal vez hay algo de asignación de memoria nativa pasando a través de JNI o ​​'ByteBuffer's con asignación directa. –

+0

@Steve Tayor Quizás ... No sé Confluencia que bien saber si está haciendo eso. He publicado una pregunta en el foro Confluence pero aún no hay respuestas. – vahidg

Respuesta

3

El consumo de memoria total de Tomcat debe calcularse NO MENOS QUE Xmx + XX:MaxPermSize (en su caso, 768MB), pero recuerdo haber visto algo que puede repasar eso. Xmx es solo el espacio de montón, y PermGen está fuera del montón (tipo de).

+4

montón PermGen + + JVM en cabeza (cantidad no especificada) –

+0

@Wesho: Bueno, podría correr en 512, sólo tiene que ajustar todos los ajustes en consecuencia. Quizás 'Xms256m, XX: MaxPermSize = 128m' lo haría. –

5

Por ejemplo, una biblioteca nativa puede asignar fácilmente memoria fuera del montón de Java.

directa ByteBuffer también hace que: http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html

El contenido de tampones directos pueden residir fuera de la montón normal de recolección de basura, por lo que su impacto sobre la huella de memoria de una aplicación no podría ser obvio

Existen buenas razones para asignar enormes ByteBuffers directos.

http://ehcache.org/documentation/offheap_store.html

+0

Gracias por esta información. – vahidg

Cuestiones relacionadas