2010-10-26 25 views
5

Actualmente estoy intentando construir mi proyecto usando hudson para llamar a maven. Sigo recibiendo el problema de error fuera de memoery. Configuré xmx y xms en todas las variables de entorno, hudson configuration y hudson project config. Configuro el xmx a 1500 mb, que debería ser más que suficiente ya que todo el proyecto es menor que 1000mb. la máquina utilizada para construir el proyecto es un servidor donde se almacena el repositorio maven para el equipo.Extraño Maven error de memoria

¿Alguien ha tenido el mismo problema? ¿Alguna idea de cómo sucede?

+0

¿Ha verificado que se aplica el cambio de xmx/xms? – kukudas

+0

¿cómo puedo hacer eso? – Javabeginner

Respuesta

6

gracias a todos por responder a mi pregunta. He resuelto el problema haciendo un volcado de pila y analizándolo. Hago un volcado de heap pasando los siguientes args VM:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:/.

Luego uso Eclipse Memory Analyser para abrir el archivo java_pidxxxxx.hprof.

Descubrí que el oyente que usamos para detectar la excepción no puede detectar la excepción. Así que el tipo de excepción se queda en la máquina virtual y, por lo tanto, la pérdida de memoria.

Gracias de nuevo por todas las respuestas

0

Asumiendo que están utilizando el JDK de Sun, a continuación, en Hudson/Gestionar configuración Proyecto Hudson/Maven/Global MAVEN_OPTS establece lo siguiente: -Xmx512m -XX: MaxPermSize = 256m

+0

Ya lo he hecho. – Javabeginner

+0

De su descripción no está claro qué opciones ha utilizado. Es sensible a mayúsculas y necesitas ser preciso. Ayudaría a ver el texto de error exacto que está recibiendo, p. es del Hudson, del proceso principal de Maven para uno de los procesos secundarios que Maven lanzó para ejecutar pruebas y otras cosas. –

0

Hudson se inicia una tarea independiente para ejecutar los trabajos de Maven . Tendrá que configurar la memoria aumentada en el campo de texto MAVEN_OPTS. El campo está ubicado en ventanas de configuración de trabajo individuales.

Editar: Dale seguimiento a tus comentarios. ¿Está por casualidad bifurcando su compilación, ejecutándola en una ejecución separada o bifurcando sus pruebas junit?

intento en su configuración de compilador (suponiendo que tiene uno):

<maxmem>512m</maxmem> 
+0

Ya lo he hecho. – Javabeginner

+0

@Javabeginner eche un vistazo a mis ediciones. Tal vez esa información puede ayudar. –

+0

Gracias por la actualización, intenté ejecutar la compilación con los testículos separados, aparentemente la compilación funciona bien sin testículos y supongo que es la prueba que causa el error de falta de memoria. Al decir testes, usamos el plugin maven surefire para ejecutar esos testículos. Acabo de leer un artículo que dice que existe la posibilidad de que Hudson, Maven, JBoss o incluso la ventana (el OS en el que mi servidor se ejecuta) no pueda soportar la configuración xmx. Lo comprobé dos veces, el servidor tiene 4 GB de memoria y el xmx está configurado en 1500 mb. ¿Configuración del compilador? ¿Eso significa Maven config para mi caso? – Javabeginner

1

DEBE asegurarse de que tiene suficiente MaxPermSpace. Me he encontrado con problemas en los que la memoria asignada a la JVM era suficiente, pero OutOfMemoryError se debía a que PermSpace se había agotado. Eso no es demasiado raro cuando se trata de compilar código, particularmente si está compilando código, tirándolo y compilando de nuevo. Para obtener más información acerca de cómo ajustar el recolector de basura (y memoria) echa un vistazo a estas referencias:

en la gestión de memoria Whitepaper en las páginas 16-17, se exponen las posibles razones de OutOfMemoryErrors. Otra defensa es bifurcar el proceso de maven y/o el compilador.

+0

Estoy seguro de que el error de falta de memoria que recibí no se relacionó con el espacio permgen, ya que realmente avanzamos en este error de memoria del error de espacio permgen – Javabeginner

+0

Es difícil solucionar un problema sistema sin tenerlo en mis manos directamente. ¿Los documentos con los que me vinculé te ayudan a descubrir qué cosas probar? Lo más probable es que tenga que crear un perfil del recolector de elementos no utilizados mientras se está ejecutando para ayudarlo a encontrar el motivo. Los documentos te dicen cómo hacerlo. –

11

Si recibe un OOM durante las pruebas, entonces debe decirle el plugin segura de tenedor una nueva máquina virtual para las pruebas:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
     <forkMode>once</forkMode> 
     <argLine>-Xms512m -Xmx512m</argLine> 
    </configuration> 
</plugin> 
+0

Acabo de hacer un perfil de Java en el módulo usando Vision VM, comparando el perfil con otro módulo, el módulo que falla parece tener muchos hilos de espera, mientras que no hay ninguno para los otros módulos. ¿Es ese el motivo del error de falta de memoria? – Javabeginner

+1

Tuvimos que hacer esto porque muchas de nuestras pruebas de unidad más antiguas no estaban limpiando los hilos y otros recursos que usaban. Cuando le preguntamos al autor del guión de la hormiga, nos dijo que era más fácil manipular un vm nuevo en lugar de arreglar las pruebas unitarias. * suspiro * Demasiada deuda técnica. – dhable

+1

@Javabeginner: Probablemente. Debe cerrar todos los archivos, establecer todas las referencias a null y limpiar todo lo que sus pruebas utilicen en tearDown(): JUnit creará una instancia de sus clases de prueba * por prueba * y las mantendrá hasta que * todas las pruebas se hayan ejecutado *. –

0

tengo el mismo problema. al intentar instrumentar el código, hudson (o JVM) descarta java de la memoria. La solución es: en el configuration of plugin cobertura-maven-plugin, use <maxmem>512m</maxmem>.