Java - Configuración óptima JVM Tomcat 6

 
Vista:

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 02/09/2014 16:21:48
Buenas tardes.

Tengo varias aplicaciones en un servidor TomCat y me ha saltado un par de veces el error "java.lang.OutOfMemoryError: PermGen space", que como saben se trata de que la memoria de la maquina virtual de java se ha quedado sin espacio.

He leído en varios sitios que la solución es ampliar esa memoria, pero querría que me explicasen, si es posible, cual es la configuración óptima, y cómo funciona exactamente el tema del pool inicial y la capacidad máxima de la máquina virtual de java.

Como datos les diré que la versión del Tomcat es la 6.0.29, el servidor es un SO Windows XP de 2 GB de RAM, y solo un proyecto de los cuatro que tengo desplegados utiliza Spring e Hiberante (que sé que ambos tiran bastante de memoria).
Son proyectos moderados para operaciones puntuales que como máximo utilizan 30 usuaros.

Un millón de gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Configuración óptima JVM Tomcat 6

Publicado por Pedro (81 intervenciones) el 02/09/2014 17:35:00
Buenas,

En tu caso concreto no creo que debas aumentar la memoria, ya que lo único que ganarías sería más tiempo pero la excepción volverá. Si la excepción se produjese justo al desplegar la primera vez si deberías aumentarla.

Las causas de las fugas de memorias son diversas, es probable que el error te salga cuando despliegas y repliegas alguna aplicación porque actualizas código, se va quedando "enganchado" el classLoader que crea Tomcat para esa app y cuando vuelves a desplegar crea uno nuevo, así hasta que llenas el PermGen.

Lo primero que probaría, sería a meter las librerías sobre todo las correspondientes a Drivers JDBC y demás en TOMCAT/lib y en muchas ocasiones se soluciona el problema.

Si aun así se repite el error, es porque algunas de las app tiene fugas de memoria y tendrías que mirar en la máquina virtual cual es para poder empezar a buscar.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Tom (1831 intervenciones) el 02/09/2014 18:06:54
Coincido con Pedro ... ¿¿ no crees que la "configuración óptima" dependería de las aplicaciones y no del server Tomcat (y no solo de las aplicaciones corriendo en el server, sino también las que corren fuera) ??

En todo caso puedes tratar de averiguar cuanta memoria física libre tienes en un entorno normal antes de arrancar Tomcat, y asignársela (casi toda) a la jvm de tu server (y cruzar los dedos) ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 03/09/2014 08:43:43
Muy buenas,

Gracias por tus observaciones. Respecto al último párrafo: ¿Cómo puedo averiguar la memoria física libre del entorno? ¿Te refieres a la unidad de disco donde tengo desplegadas las aplicaciones? Y cuando dices que asigne casi toda la memoria a la jvm, te refieres al parámetro de memoria máxima o al inicial?

Muchísimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Tom (1831 intervenciones) el 03/09/2014 09:05:35
Ome, memoria RAM, no en disco. A la jvm no le viene nada bien hacer swapping.
Como averiguarlo ... pues depende del S.O.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 03/09/2014 12:09:38
Hola otra vez.

Investigando y monitorizando la JVM he visto que el indicador de permgen se dispara cada vez que visualizo informes en pdf que genera mi aplicación (cualquier aplicación de las que tengo, al generar un informe, incrementa el uso de la memoria, luego no se libera, queda ocupada permanentemente). Deduzco que algo hay en el código o en el propio informe (generado con jasper reports) que genera fugas de memoria.

Me podéis orientar un poco en la forma de actuar ante este problema?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 03/09/2014 08:37:20
Muy buenas y gracias por contestar.

Respecto a lo que comentas del classLoader, leí que la solución para "limpiar" los residuos totalmente era reiniciar el equipo cada vez que hiciera una actualización de la app, ¿es correcto? Lo sea o no, lo hice y a la semana me salió el permGen, así que algo más debe haber...

Desde luego lo que sí voy a probar es a trasladar las librerías en la ruta que me has dicho, a ver si hay suerte y se soluciona el problema.

Muchísimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 04/09/2014 11:20:46
Buenos días.

El estado de la situación es el siguiente:

1) Al reiniciar el servidor, de por sí, sin utilizar prácticamente ningún framework, tengo utilizados casi 10 MB de PermGen Space.

2) Al visualizar un par de páginas de la aplicación, estos 10 MB suben a 12.

3) Al visualizar un informe pdf (generado con jasper reports 3.7.6.) estos 12 MB suben a 30 MB.

Con esto la capacidad por defecto la tengo ocupada casi al 50%.

Evidentemente, algún problema debe haber, sobre todo en el paso 3.

Si a alguien se le ocurre a qué se puede deber esto, agradeceré cualquier ayuda.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Configuración óptima JVM Tomcat 6

Publicado por Pedro (81 intervenciones) el 04/09/2014 16:36:25
Es posible que Jasper para hacer un reporte en PDF cargue muchas clases y ya se quedan cargadas. Lo malo es cuando las librerías de jasper están duplicadas en cada aplicación, ya que en cuanto hagas otro reporte cargará el mismo código llegando a 48mb.

¿Has copiado las librerías donde te dije?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 04/09/2014 17:47:00
Buenas tardes.

Efectivamente, trasladando todas las librerías a la ruta Tomcat/lib, se produce un único salto de 10 mb al visualizar un pdf por primera vez. El resto de visualizaciones ocupan memoria permgen pero una cantidad mucho más moderada (0,01 mb o menos), por lo que doy por solucionada la incidencia.

Última pregunta: crees que podría permitirme incrementar a 128m (o incluso a 256m) la memoria permgen? He visto que es muy sencillo, pero no sé que riesgos entraña hacerlo.

Muchísimas gracias Pedro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Configuración óptima JVM Tomcat 6

Publicado por Pedro (81 intervenciones) el 06/09/2014 16:49:54
Buenas,

El aumentar la memoria PermGen no entraña riesgos si hay suficiente RAM pero ¿cuando necesito aumentar la memoria PermGen?. Si tienes fugas de memoria como era tu caso, al ampliarla solo "compras" algo de tiempo hasta que se agote, en ese caso aumentarla era un parche en vez de una solución. Cuando hace falta aumentarla suele ser en los casos que nada más desplegar las app's salta la excepción o la memoria se queda prácticamente ocupada.

Yo te recomiendo observar el servidor unos días porque a lo mejor no necesitas aumentarla y si algo funciona es mejor no tocarlo

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 08/09/2014 11:07:04
Muchas gracias Pedro.

Entiendo lo que dices pero claro, aunque sea poco a poco, se me va a ir completando la memoria porque al visualizar cada pdf se ocupan 0,01 mb de Perm Gen...y al final tendré un problema.

He buscado en google y he visto que cuando la gente se ha encontrado con esa incidencia la solución que ofrecen es pasarse a Java 7 que mejora considerablemente este tipo de cosas, pero es un cambio demasiado drástico para mi.

De momento, la forma que veo para que mi proyecto funcione con más o menos tranquilidad es aumentar la memoria a 256 mb (ya que tengo 2 gb de RAM) y periódicamente reiniciar el Tomcat.

Gracias de nuevo por la ayuda.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Ramon (1 intervención) el 17/12/2014 15:19:13
Hola Newbie, he visto tu problema, quisiera saber como hiciste para monitorizar la memoria usada por las aplicaciones. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Configuración óptima JVM Tomcat 6

Publicado por Newbie83 (37 intervenciones) el 17/12/2014 16:34:50
Muy buenas.

Para monitorizar la memoria que usan las aplicaciones te sirve el propio Tomcat. Introduciendo http://localhost:8080/ en el navegador, accedes al panel del tomcat y en él hay una opcion que pone "Server Status". Ahí lo tienes.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Configuración óptima JVM Tomcat 6

Publicado por Ramon (1 intervención) el 18/12/2014 14:52:55
Quiero aumentar la memoria del tomcat, en este momento no veo que tenga nada configurado, sabes si hay un limite por defecto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar