在Linux的OutOfMemoryError异常自动重启罐子(Auto restart jar o

2019-10-17 04:16发布

我怎么能自动重新启动在Linux中运行的JAR文件。

我运行在linux VPS罐子在一个单独的屏幕,但一段时间后,由于的OutOfMemoryError Java堆空间后停止。

Answer 1:

写一个简单的发射一旦下来,这将重新启动应用程序。 事情是这样的:

#!/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。 你可能想看看它,它非常直截了当。



Answer 2:

你是否尝试过通过分配更多的内存JVM ? 如果仍然问题仍然存在然后,您可以aasociate 关闭挂钩 ,但没有gaurantee它将始终执行。 您可以调用它从其他进程,这将一定的延迟之后再次出演程序



Answer 3:

试试这个: -XX:OnOutOfMemoryError="<cmd args>; <cmd args>"写shell脚本“杀死-TERM PID”,然后重新启动它,并把脚本到cmd命令行选项的一部分。 或多或少就是这样,但你需要知道的进程的PID(或依靠killall或PS等)

你也可以使用monit的定期检查,如果应用程序正在运行。 更多或更少的这些都是标准的解决方案。 我自己,使用监控守护程序通过电子邮件/短信通知时内存不足,以便采取适当的检查,如果有固定的泄漏。 说白了倾倒堆很烂,当你有几十个GB的吧。



文章来源: Auto restart jar on OutOfMemoryError Linux