如何在 Linux 中自动重启可运行的 jar 文件。
我在一个单独的屏幕中在 linux VPS 中运行 jar,但由于 OUTOFMEMORYERROR Java 堆空间,它会在一段时间后停止。
如何在 Linux 中自动重启可运行的 jar 文件。
我在一个单独的屏幕中在 linux VPS 中运行 jar,但由于 OUTOFMEMORYERROR Java 堆空间,它会在一段时间后停止。
编写一个简单的启动器,它会在应用程序关闭后重新启动。像这样的东西:
#!/bin/sh
TEMPFILE=`mktemp`
while true ; do
echo "`date` Starting application" >> $TEMPFILE
java -XX:OnOutOfMemoryError="kill -9 %p" -jar application.jar
sleep 5
done
为了确保虚拟机正确完成,您可能需要在主循环周围考虑以下内容:
try {
// main loop
businessLogic();
} catch (OutOfMemoryError E) {
System.exit(1);
}
编辑:我个人成功地使用Java Service Wrapper重新启动了一个不时失败的 apache tomcat,它在应用程序重新部署过多后遭受内存泄漏。你可能想看看它,它非常简单。
试试这个:-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
编写一个shell脚本来“kill -TERM pid”,然后再次启动它并将脚本放入cmd
命令行选项的一部分。差不多就是这样,但您需要知道进程的 pid(或依赖 killall 或 ps 等)
您还可以使用monit定期检查应用程序是否正在运行。这些或多或少是标准解决方案。我自己使用监控守护程序在内存不足时通过电子邮件/短信通知,以便可以进行适当的检查以及是否存在要修复的泄漏。当你有几十 GB 的时候,直接转储堆很糟糕。