Voy a plantear un problema real relacionada con la memoria de la JVM de Java que aparentemente tiene solución pero que no consigo dar exactamente con la solución. Espero que me ayuden.

Un usuario necesita subir un documento de 50 megas al gestor documental de la aplicación, pero le da error de Java Heap Space. Hasta ahora lo habíamos solucionado poniendo en la configuración de la JVM del cliente el parámetro –Xmx128m. Pero este parámetro sólo dejaba subir ficheros de 15 megas como máximo.

Por lo que podido investigar haciendo pruebas en la máquina de desarrollo, creo que hay que incrementar la zona de memoria de la JVM que se denomina “Eden Space” (ver imagen adjunta). Al incrementar esa zona, se decrementa la “Tenured Gen” (son inversamente proporcionales). He ampliado todo lo posible la memoria, pero no consigo subirla todo lo que quiero porque Tomcat no arranca.

Se que es la “Eden Space” la que hay que tocar porque al principio tenía 17 megas, y no me dejaba subir un fichero de 18mb. En cuanto la amplié ya me dejó (la tuve que ampliar casi hasta 200 megas). Pero he conseguido ampliarla hasta 344 Megas, pero el fichero de 53 megas me sigue sin dejar subirlo.

Yo he utilizado el software LambdaProject para poder monitorizar las zonas de memoria y ver si los ajustes que realizo en Tomcat se están realizando.

Estos son los parámetros que como máximo he podido aplicar a Tomcat:

-Xmx768M
-Xms64M
-XX:PermSize=256m
-XX:MaxPermSize=768
-XX:NewRatio=2
-Dcom.sun.management.jmxremote

configtomcat

El último parámetro es necesario para LambdaProject para poder mostrar los gráficos.

Sabiendo que lo que pongamos en Xmx, tendremos la siguiente relación Xmx = TenuredSpace + EdenSpace. Y que por defecto, EdenSpace es 1:2 de la TenuredSpace. Si queremos cambiar esa relación añadimos el parámetro -XX:NewRatio=2 (valor por defecto). En el siguiente ejemplo hemos puesto una relación 1:1 para que tengan el mismo tamaño.

lambdaproject

Aunque haya utilizado -Xmx768M y LambdaProject me confirme el nuevo tamaño, Java console me dice que la memoria es de 64 Mb. ¿Alguien sabría decirme porqué?

Gracias a todos por la colaboración.

Un saludo.

Advertisements

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies

Pin It on Pinterest

Share This

Compártelo

¡Comparte este artículo con tus amigos!