如何在Linux中自动重启runnable jar文件。
我在一个单独的屏幕上运行linux VPS中的jar但由于OUTOFMEMORYERROR Java堆空间而在一段时间后停止。
答案 0 :(得分:0)
您是否尝试过为jvm分配更多内存?如果仍然存在问题那么 你可以联系shutdown hook但是没有任何保证会永远执行。您可以从中调用其他进程,这会在一段时间后再次为您的程序加注
答案 1 :(得分:0)
编写一个简单的启动程序,它将在应用程序关闭后重新启动它。像这样:
#!/bin/sh
TEMPFILE=`mktemp`
while true ; do
echo "`date` Starting application" >> $TEMPFILE
java -XX:OnOutOfMemoryError="kill -9 %p" -jar application.jar
sleep 5
done
为了确保VM正确完成,您可能需要考虑主循环周围的以下内容:
try {
// main loop
businessLogic();
} catch (OutOfMemoryError E) {
System.exit(1);
}
编辑:我个人成功地使用Java Service Wrapper重新启动了一个现在然后失败的apache tomcat,它在应用程序重新部署太多后遭遇内存泄漏。你可能想看看它,它非常直接。
答案 2 :(得分:0)
试试这个:-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
将shell脚本写入“kill -TERM pid”,然后再次启动它并将脚本放入命令行选项的cmd
部分。或多或少就是这样,但你需要知道进程的pid(或者依赖killall或ps等)
此外,您可以使用monit定期检查应用程序是否正在运行。或多或少是标准解决方案。我,我自己,当内存不足时,使用监控守护进程通过电子邮件/短信通知,这样可以进行适当的检查,如果有泄漏需要修复。当你有几十GB时,直接倾销堆很糟糕。