我怎么能自动重新启动在Linux中运行的JAR文件。
我运行在linux VPS罐子在一个单独的屏幕,但一段时间后,由于的OutOfMemoryError Java堆空间后停止。
我怎么能自动重新启动在Linux中运行的JAR文件。
我运行在linux VPS罐子在一个单独的屏幕,但一段时间后,由于的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服务包装重启从内存泄漏遭受的应用已经重新部署太多后,现在再失败的Apache Tomcat。 你可能想看看它,它非常直截了当。
你是否尝试过通过分配更多的内存JVM ? 如果仍然问题仍然存在然后,您可以aasociate 关闭挂钩 ,但没有gaurantee它将始终执行。 您可以调用它从其他进程,这将一定的延迟之后再次出演程序
试试这个: -XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
写shell脚本“杀死-TERM PID”,然后重新启动它,并把脚本到cmd
命令行选项的一部分。 或多或少就是这样,但你需要知道的进程的PID(或依靠killall或PS等)
你也可以使用monit的定期检查,如果应用程序正在运行。 更多或更少的这些都是标准的解决方案。 我自己,使用监控守护程序通过电子邮件/短信通知时内存不足,以便采取适当的检查,如果有固定的泄漏。 说白了倾倒堆很烂,当你有几十个GB的吧。