Как перезапустить приложение Java, управляемое systemd, при ошибках OutOfMemory

Как перезапустить приложение Java, управляемое systemd, при ошибках OutOfMemory

У меня установлено приложение Java (поверх фреймворка Spring Boot) как служба 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

Как управлять перезапусками служб в некоторых условиях, например, автоматическим перезапуском после ошибок OutOfMemory

решение1

Как сказал Филдор, я предлагаю вам решить проблемы с памятью.

После этого возможным решением будет:

Если вы используете Java до версии 8u92, вы можете добавить в JVM следующий аргумент:

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

в Java версии 8u92 или выше вы можете использовать -XX:+CrashOnOutOfMemoryили-XX:+ExitOnOutOfMemoryError

Затем настройте службу на перезапуск при сбое:

Restart=on-failure

или

Restart=always

Связанный контент