如何让java程序全天候运行?

时间:2013-10-14 02:23:32

标签: java amazon-web-services jvm

我制作了一个Java程序,并将其作为一个jar文件。我想让它在我的AWS上全天候运行。我使用一个名为screen的应用程序来保持它在我注销后运行。我用这个命令:

screen java -jar my_app.jar

但它无法一直保持运行。它运行一两天后就会停止。我保留了一个日志,我没有发现任何异常终止它。我想知道JVM是否会因为任何原因(例如高内存使用率)而终止我的应用程序? JVM是否保留日志?我在哪里可以找到JVM的日志?我必须让我的应用程序成为deamon吗?如果必须,怎么样?

2 个答案:

答案 0 :(得分:8)

不,保持Java应用程序运行没什么特别之处。只需要至少有一个非守护程序线程仍处于活动状态。例如,这是一个永远运行的完整程序:

public class Forever {
    public static void main(String[] args) throws InterruptedException {
        while (true) { Thread.sleep(1000); }
    }
}

如果您的应用程序即将死亡,那是因为某处出现了某些错误。确保检查正在写入的任何日志以及进程的stdout和stderr以查找原因。

答案 1 :(得分:2)

也许您找到了解决方案,但在Windows上,您可以使用批处理“看门狗”在程序关闭时重新启动程序(并记录数据)。

:launch
java -jar my_app.jar 1>>log.txt 2>>err.txt
goto launch
在linux / unix上你可以按照这些方式进行重击(我懒得做2分钟的搜索) 另外,好的方法是监控应用程序的内存使用情况,如果超过阈值(如70%)则将其关闭,它将由ba * h脚本重新启动