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

qwa*_*zer 5 java systemd

我将 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
Run Code Online (Sandbox Code Playgroud)

如何管理某些条件下的服务重启,例如 OutOfMemory 错误后的自动重启

Fed*_*rra 7

就像菲尔多说的,我建议你修复内存问题。

之后可能的解决方案是:

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

java -jar <jar-name> -XX:OnOutOfMemoryError="kill -9 %p"
Run Code Online (Sandbox Code Playgroud)

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

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

Restart=on-failure
Run Code Online (Sandbox Code Playgroud)

或者

Restart=always
Run Code Online (Sandbox Code Playgroud)