HeapDump de JVM: la memoria se acumula en una instancia de "java.util.concurrent.ConcurrentHashMap$Segment

Tengo problemas con JVM-Heap.

Operamos un sitio web con Apache HTTP Server y un servidor de aplicaciones Apache Tomcat.

Todas las solicitudes *.jsp al servidor Apache HTTP se redirigirán al servidor Tomcat (protocolo: ajp).

El sitio web tiene más de 10'000 archivos jsp.

También tenemos un dispositivo de búsqueda de Google y rastrea el sitio web todas las noches.

Mientras se rastrea, el espacio de almacenamiento dinámico jvm aumenta hasta el límite máximo de 8 GB.

Con javamelody, puedo ver que el espacio de almacenamiento dinámico aumenta de forma análoga a las clases cargadas.

Para el análisis tomé un heapdump.

Aquí está el informe de eclipse MAT:


Una instancia de "org.apache.jasper.servlet.JspServlet" cargada por "org.apache.catalina.loader.StandardClassLoader @ 0x7092c5148" ocupa 1'189'603'328 (96.75 %) bytes.

La memoria se acumula en una instancia de "java.util.concurrent.ConcurrentHashMap$Segment[]" cargada por "".

Palabras clave

java.util.concurrent.ConcurrentHashMap$Segmento[]

org.apache.catalina.loader.StandardClassLoader @ 0x7092c5148

org.apache.jasper.servlet.JspServlet


¿Hay algún problema con las solicitudes de GSA?

¿Y por qué JVM no puede descargar las clases generadas?

preguntado el 03 de mayo de 12 a las 18:05

Esto muestra 1.1 GB de almacenamiento dinámico utilizado. ¿Es esta la única parte importante que consume memoria? -

Si, es el único. Detuve manualmente el GSA para tomar el volcado del montón, por lo que la razón por la que no es muy grande. También tomé uno la semana pasada, entonces era de 3.8 GB. -

No detendría a la GSA para realizar el volcado del montón. Si lo hace, algunos de los recursos pueden liberarse y luego su volcado de pila no le contará toda la historia. ¿Ve excepciones de falta de memoria en sus registros? Si es así, es posible que desee agregar el parámetro de inicio HeapDumpOnOutOfMemoryError stackoverflow.com/q/542979/425406 -

Eso es un volcado de pila después de un OutOfMemoryError: una instancia de "org.apache.jasper.compiler.JspRuntimeContext" cargada por "org.apache.catalina.loader.StandardClassLoader @ 0x7092af928" ocupa 4'367'316'712 (98.57%) bytes La memoria se acumula en una instancia de "java.util.concurrent.ConcurrentHashMap$Segment[]" cargada por " ". Palabras clave java.util.concurrent.ConcurrentHashMap$Segment[] org.apache.catalina.loader.StandardClassLoader @ 0x7092af928 org.apache.jasper.compiler.JspRuntimeContext -

lea esta documentación si aún no lo ha hecho tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html Esto lo ayudará a ajustar su motor Jasper para posiblemente reducir la huella que esto está causando:

1 Respuestas

Parece que cargar todos los JSP está causando problemas.

De forma predeterminada, Tomcat mantiene todos los JSP cargados en la memoria hasta que se detiene la aplicación web.

En Tomcat 7, puede configurar el parámetro maxLoadedJsps del Servlet JSP para limitar la cantidad de JSP en la memoria.

contestado el 03 de mayo de 12 a las 19:05

Thx, ¿hay también una solución para Tomcat 6? - user1373150

Aún no. El back-port de esta función se estancó debido a una combinación de algunos errores que debían corregirse y la falta de interés. - Mark Thomas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.