Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

Restart=on-failure

или

Restart=always