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

我有作为systemd服务安装的Java应用程序(在Spring Boot框架之上)。

[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 

如何pipe理某些情况下的服务重启,例如OutOfMemory错误后自动重启

像Fildor说,我build议你解决内存问题。

之后,一个可能的解决scheme是:

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

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

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

然后configuration您的服务以在崩溃时重新启动:

 Restart=on-failure 

要么

 Restart=always