如何在出现 OutOfMemory 错误时重新启动由 systemd 管理的 Java 应用程序

如何在出现 OutOfMemory 错误时重新启动由 systemd 管理的 Java 应用程序

我已将 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

就像 Fildor 所说的那样,我建议你解决内存问题。

之后一个可能的解决方案是:

如果您使用的是 8u92 之前的 Java,则可以向 JVM 添加以下参数:

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

在 Java 版本 8u92 或更高版本中,你可以使用-XX:+CrashOnOutOfMemory-XX:+ExitOnOutOfMemoryError

然后将服务配置为在崩溃时重新启动:

Restart=on-failure

或者

Restart=always

相关内容