J'ai un projet Maven, qui construit 6 projets Maven distincts à Jenkins. Le problème auquel je suis confronté est qu'au fil du temps, la construction du projet échoue en donnant le code d'erreur 137:
ERREUR: Maven JVM s'est terminée de manière inattendue avec le code de sortie 137
Le projet a pu être construit avec succès en utilisant les mêmes objectifs Maven dans la console, mais à Jenkins, il échoue. En redémarrant Jenkins, le problème peut être résolu.
J'ai des listes de tableaux statiques. Ces listes sont utilisées pour certains cas de test. Serait-ce une fuite de mémoire?
J'exécutais le même comportement sur notre serveur de build. L'erreur est IMHO non associée aux paramètres de mémoire maven (c'est-à-dire MAVEN_OPTS
) mais plutôt avec la mémoire de la machine sous-jacente (Linux) elle-même (sur laquelle Jenkins s'exécute).
Le problème (rejeté) de Jenkins https://jenkins-ci.org/issue/12035 donne plus de détails à ce sujet:
Pour référence, le code d'état 137 (128 + 9) signifie généralement (peut différer entre les saveurs d'Unix). Que le processus s'est terminé par la réception d'un signal. Dans ce cas, le signal 9 est SIGKILL et kill imblocable.
Si tel est le cas , la machine/le système d'exploitation sous-jacent a besoin de plus de mémoire virtuelle . Cela peut être ajouté en ajoutant de la mémoire physique ou en échangeant de l'espace selon le cas.
Vous devriez essayer d'augmenter la mémoire virtuelle de votre machine.
Remarque:
Cela explique également pourquoi un redémarrage de Jenkins résout (temporairement) le problème.
Je pense que vous devriez augmenter les valeurs des paramètres de mémoire - dans MAVEN_OPTS
sur la machine Jenkins, par exemple.
MAVEN_OPTS=-Xmx1.5G -XX:MaxPermSize=0.7G
Lors de l'exécution de Maven via Jenkins, j'ai eu cette erreur:
ERROR: Maven JVM terminated unexpectedly with exit code 137
J'ai accidentellement mis un "et" dans le paramètre MAVEN_OPTS:
-Xmx1024m and -Xms1024m
Ensuite, j'ai eu cette erreur:
Error: Could not find or load main class and
ERROR: Failed to launch Maven. Exit code - 1
Après avoir supprimé le "et", j'ai relancé Jenkins et reçu cette erreur:
Java.lang.OutOfMemoryError: Java heap space
Enfin, j'ai augmenté la mémoire en utilisant Global MAVEN_OPTS:
-Xmx4096m -Xms4096m
Cela a résolu le problème. Donc, cela semble être lié à la mémoire. Cependant, il peut s'agir d'un problème lié à la machine/machine virtuelle (comme indiqué ci-dessus @boskoop) ou un problème de conteneur (si la JVM est exécutée via Jenkins/Docker/etc).
Le processus a été tué par Linux OOM Killer car vous manquez de ressources sur la machine.
Donnez à la machine plus de mémoire et/ou permutez ou réduisez l'empreinte mémoire de votre processus qui est directement impacté par jvm par défaut Xmx, ce qui est très probablement loin de ce dont jvm a réellement besoin.
Donnez-lui des options de ligne de commande supplémentaires Java
-Xmx256m -XX:MaxPermSize=512m
ou configurer la variable système
MAVEN_OPTS=-Xmx256m -XX:MaxPermSize=512m
MaxPermSize n'a aucune utilité pour Java 8+
J'ai rencontré le même code d'erreur. Ce code d'erreur semble en effet lié aux contraintes de ressources JVM dans l'environnement Jenkins. Je suggérerais de relancer la génération une deuxième fois après que l'erreur se soit produite pour voir si vous pouvez obtenir une sortie supplémentaire/différente, bien que cela dépendra certainement de la partie de la génération qui a causé les problèmes de ressources (dans ma cause, c'était un téléchargement 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