5 votes

Comment redémarrer une application Java gérée par systemd en cas d'erreur OutOfMemory ?

J'ai l'application Java (au dessus de Spring Boot framework) installée en tant que service systemd.

[Unit]
Description=${module_name}-service
Requires=network.target
After=syslog.target

[Service]
User=${user_name}
ExecStart=/opt/${module_name}/${module_name}-${version}.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Comment gérer le redémarrage des services dans certaines conditions, par exemple le redémarrage automatique après des erreurs de type "OutOfMemory" ?

8voto

amro Points 323

Comme l'a dit Fildor, je vous suggère de résoudre les problèmes de mémoire.

Après cela, une solution possible est la suivante :

Si vous utilisez Java avant 8u92, vous pouvez ajouter à la JVM l'argument suivant :

java -jar <jar-name> -XX:OnOutOfMemoryError="kill -9 %p"

dans la version 8u92 ou supérieure de Java, vous pouvez utiliser -XX:+CrashOnOutOfMemory o -XX:+ExitOnOutOfMemoryError

Configurez ensuite votre service pour qu'il redémarre en cas de panne :

Restart=on-failure

o

Restart=always

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X