在OutOfMemoryError Linux上自动重启jar

时间:2012-08-31 11:31:04

标签: java linux heap-memory

如何在Linux中自动重启runnable jar文件。

我在一个单独的屏幕上运行linux VPS中的jar但由于OUTOFMEMORYERROR Java堆空间而在一段时间后停止。

3 个答案:

答案 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时,直接倾销堆很糟糕。