2013-10-14 83 views
5

我做了一個Java程序,並將其製作成jar文件。我想讓它在我的AWS上全天候運行。我使用稱爲屏幕的應用程序在註銷後繼續運行。我使用這個命令:如何讓一個java程序全天候運行?

screen java -jar my_app.jar 

但它無法一直運行。它運行一兩天後會停止。我做了一個日誌,我沒有發現任何異常終止它。我想知道JVM是否會因任何原因(例如高內存使用率)而終止我的應用程序? JVM是否保留日誌?我在哪裏可以找到JVM的日誌?我必須讓我的應用成爲deamon嗎?如果我必須如何?

+1

聽起來像它最終將耗盡內存。你可以附加任何類型的分析器,看看它的原因可能是什麼。 – Makoto

+0

如何連接探查器? – user2452323

回答

8

不,沒有什麼特別讓Java應用程序運行。至少有一個非守護線程仍處於活動狀態。舉例來說,這是一個將永遠運行一個完整的程序:

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

如果您的應用快死了,這是因爲一些錯誤的地方。確保檢查正在寫入的日誌以及進程的stdout和stderr以查找原因。

+0

也許吧。小點,但如果使用'Thread.sleep(Integer.MAX_VALUE)',則可以在循環上節省更多的CPU週期 –

2

也許您找到了解決方案,但在Windows上,您可以使用批處理「看門狗」在關閉時重新啓動程序(並記錄數據)。

:launch 
java -jar my_app.jar 1>>log.txt 2>>err.txt 
goto launch 

在Linux/UNIX你可以沿着這些線路的一個bash(我懶得做2分鐘搜索) 也,好東西是監測您的應用程序的內存使用情況,然後將其關閉如果它超過閾值(如70%),它將通過ba * h腳本重新啓動。