world pipelines hello example delivery create java maven jenkins

java - pipelines - Jenkins Maven Build 137 Error



maven project configuration in jenkins (5)

Tengo un proyecto Maven, que construye 6 proyectos separados de Maven en Jenkins. El problema al que me enfrento es que a lo largo del tiempo la compilación del proyecto falla al dar el código de error 137:

ERROR: Maven JVM terminó inesperadamente con el código de salida 137

El proyecto podría construirse con éxito utilizando los mismos objetivos de Maven en la consola, pero en Jenkins falla. Al reiniciar Jenkins, el problema se puede resolver.

Tengo algunas listas de arreglos estáticos. Estas listas se usan para algunos casos de prueba. ¿Podría ser esto una pérdida de memoria?


Creo que debería aumentar los valores de la configuración de memoria, en MAVEN_OPTS en la máquina Jenkins, por ejemplo

MAVEN_OPTS=-Xmx1.5G -XX:MaxPermSize=0.7G


Cuando ejecuto Maven a través de Jenkins, recibí este error:

ERROR: Maven JVM terminated unexpectedly with exit code 137

Accidentalmente puse un "y" en el parámetro MAVEN_OPTS:

-Xmx1024m and -Xms1024m

Entonces, obtuve este error:

Error: Could not find or load main class and ERROR: Failed to launch Maven. Exit code - 1

Después, quitando el ''y'', volví a Jenkins y recibí este error:

java.lang.OutOfMemoryError: Java heap space

Finalmente, aumenté la memoria usando Global MAVEN_OPTS:

-Xmx4096m -Xms4096m

Esto solucionó el problema. Entonces, esto parece estar relacionado con la memoria. Sin embargo, podría tratarse de un problema relacionado con la máquina / VM (como se indicó anteriormente en @boskoop) o un problema con el contenedor (si se ejecuta JVM a través de Jenkins / Docker / etc).


El proceso fue asesinado por Linux OOM Killer porque tiene pocos recursos en la máquina.

Dale a la máquina más memoria y / o intercambia o reduce la huella de memoria de tu proceso, que se ve directamente afectada por jvm Xmx por defecto, que muy probablemente está muy lejos de lo que realmente necesita JVM.

Dale opciones adicionales de línea de comando de java

-Xmx256m -XX:MaxPermSize=512m

o configure la variable del sistema

MAVEN_OPTS=-Xmx256m -XX:MaxPermSize=512m

MaxPermSize no tiene uso para java 8+


Me encontré con el mismo código de error. Este código de error parece estar relacionado con las restricciones de recursos de JVM en el entorno de Jenkins. Sugeriría que vuelva a ejecutar la compilación una segunda vez después de que se produzca el error para ver si puede obtener resultados adicionales / diferentes, aunque esto dependerá de qué parte de la compilación causó los problemas de recursos (en mi causa se trataba de descargas de Maven )

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000fb7cb000, 7331840, 0) failed; error=''Cannot allocate memory'' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 7331840 bytes for committing reserved memory. # An error report file with more information is saved as: # /vagrant/args4java/hs_err_pid10470.log ERROR: Maven JVM terminated unexpectedly with exit code 1 Finished: FAILURE


Me encontré con el mismo comportamiento en nuestro servidor de compilación. El error no está asociado en mi humilde opinión con la configuración de memoria maven (es decir, MAVEN_OPTS ), sino más bien con la memoria de la máquina subyacente (Linux) (en la que se ejecuta Jenkins).

El (rechazado) problema de Jenkins https://jenkins-ci.org/issue/12035 brinda más detalles sobre este asunto:

Como referencia, el código de estado 137 (128 + 9) normalmente significa (puede diferir entre los sabores de Unix). Que el proceso finalizó al recibir una señal. En este caso la señal 9 que es SIGKILL y kill sin bloqueo.

Si este es el caso, la máquina / sistema operativo subyacente necesita más memoria virtual . Esto se puede agregar agregando memoria física o cambiando el espacio según corresponda.

Debería intentar aumentar la memoria virtual de su máquina.

Nota:
Esto también explica por qué un reinicio de Jenkins (temporalmente) soluciona el problema.