2017-04-25 53 views
1

我遇到了Jetty 9服務器應用程序的問題,該應用程序似乎在閒置較長時間後進入某種靜止狀態。通常情況下,Java進程的內存使用量爲〜500 MB,但空閒一段時間後,似乎下降到不到50 MB。第一個請求需要花費幾秒鐘的時間來響應,而請求通常在幾十毫秒的範圍內。但是在一次或兩次請求之後,應用程序似乎回到了正常的響應狀態。閒置期後的Java服務器應用程序緩慢(Windows)

我在32位Oracle Java 8 JVM上運行。我的JVM配置是非常基本的:

java -server -jar start.jar 

我希望這個問題可以通過JVM配置來解決。有誰知道是否有任何特定的參數來禁用此類行爲?

編輯:根據Ivan的評論,我能夠找出問題的根源。原來,Windows正在將Java進程的一部分交換到磁盤。有關我的解決方案的說明,請參閱我自己的答案。

+0

你可以嘗試添加'-Xms500m' –

+3

它看起來像你的內存被換出(或其他操作系統級別的東西)。在這裏看到相同的問題http://stackoverflow.com/questions/43464971/jvm-jit-deoptimization-after-idle/43466815#43466815欲瞭解更多信息,請提供操作系統信息和交換使用情況。 – Ivan

回答

1

根據Ivan的評論,我能夠找出問題的根源。原來,Windows正在將Java進程的一部分交換到磁盤。將私人工作集與任務管理器中的提交大小進行比較時,這是清晰可見的。

我對此的解決方案有兩方面。首先,我在每分鐘運行的服務器應用程序中完成一項簡單的計劃任務,並執行簡單的測試以確保重要服務長時間不會無效。我希望這應該確保Windows不會將相關頁面視爲不活動。

之後,我還注意到該過程正在執行「低於正常」優先級。所以我改變了啓動服務器的腳本,以確保它以前進的「高」優先級運行。這似乎可能會影響交換行爲,也可能已經足以自行解決問題,但是我只是在已經部署第一個解決方案後才發現它,因此尚不清楚。無論如何,一切似乎都在按照現在的狀態運作。