2010-05-11 13 views
7

Mi aplicación muestra un aumento en el tamaño de 'Antigua generación'/'Generación sostenida', y cuando alcanza el límite máximo para 'Vieja generación', de repente aumenta el tamaño de PermGen. Éstos son mis aprestos generación:Java HotSpot 1.6 VM, recolección de basura - Scary PermGen

-Xmx1200m -Xms1200m -Xmn450m -XX:MaxPermSize=600m -XX:+UseParallelGC 

Esto está en Fedora 32 bits por lo que no puede tener un montón más grande que esto.

La aplicación no está haciendo una carga de clases sofisticada, aunque está utilizando Spring IOC e Hibernate, Spring App-context.xml define unos 1000 Beans.

Esta aplicación comienza con 175MB PermGen, que aumenta constantemente a ~ 250MB en pocas horas, se mantiene así hasta que la generación sostenida alcanza ~ 780 MB, luego permgen salta a ~ 500MB mientras que Old Gen cae a ~ 500MB.

Esto me obliga a reiniciar la aplicación todos los días, y me da un susto real de error OutOfMemory que se avecina. Cualquier idea sería muy útil.

Gracias Gala101

13/May: ¿Podría alguien arrojar luz sobre lo que sucede cuando 'Old Gen' es el recolector de basura?
¿El jvm pone colecciones de 'Old Gen' en PermGen?
Mi espiga PermGen solo aparece cuando la recolección se realiza desde 'Old Gen', también la disminución en el tamaño de OldGen coincide estrechamente con el aumento en el tamaño de PermGen.
PD: No hago ningún despliegue/desaplicación en vivo, ya que de seguro se comerá PermGen.
A continuación se muestra un spanshot actual de mi página de monitorización: (la parte comprometida acababa de saltar desde ~ 250 MB a 500 MB)

PS Perm Gen 
Type Non-heap memory 
Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K) 
Peak Usage init = 16777216(16384K) used = 254453736(248489K) committed = 504954880(493120K) max = 629145600(614400K) 
Collection Usage init = 16777216(16384K) used = 252421536(246505K) committed = 504954880(493120K) max = 629145600(614400K) 
+0

Por lo que yo sé la MaxPermSize no puede contener más de 256 ... –

+1

@Bozhidar: No es cierto, el tamaño PermGen puede ser mucho mayor que el – skaffman

Respuesta

2

Seguiría los consejos de leonm para analizar lo que toma tanta memoria. Apuesto a que tienes algún tipo de pérdida de memoria desagradable.

Usted dice que no hace ninguna clase de carga de lujo, pero Hibernate genera algunas clases sobre la marcha para usted. ¿Utiliza algunas características AOP (por ejemplo, del módulo Spring AOP?).

Básicamente, si se está quedando sin espacio PermGen, parece que su aplicación sigue produciendo nuevas clases (porque son clases que están almacenadas en PermGen).

+0

me gustaría probar jmap esta noche y al día .. No estamos utilizando Spring AOP, pero estamos usando lotes de frijoles (que se supone que son únicos, no estoy seguro de si estos son un factor contribuyente). Además, ¿podría usted o alguien arrojar luz sobre lo que sucede cuando 'Old Gen' es basura recolectada? ¿Jvm pone colecciones de 'Old Gen' en PermGen? Mi PermGen pico llega sólo cuando ocurre la colección de 'Old Gen', también disminuyen de tamaño OldGen partidos estrechamente aumento en el tamaño PermGen .. – Gala101

0

Uso jmap hacer un volcado de memoria antes de reiniciar el servidor y analizar con Eclipse MAT

0

Permgen se filtra si sigue desplegando/anulando aplicaciones en el servidor de aplicaciones.

Consulte este enlace para obtener más información sobre cómo esto no es culpa del servidor de la aplicación.

http://blogs.oracle.com/fkieviet/entry/classloader_leaks_the_dreaded_java

+0

Nunca redploy en un Tomcat corriendo, siento no he mencionado anteriormente que – Gala101

+0

PermGen mayoría tiene definiciones de clases . Me pregunto qué tipo de aplicación tienes? – Ram

Cuestiones relacionadas