2017-04-25 51 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不会将相关页面视为不活动。

之后,我还注意到该过程正在执行“低于正常”优先级。所以我改变了启动服务器的脚本,以确保它以前进的“高”优先级运行。这似乎可能会影响交换行为,也可能已经足以自行解决问题,但是我只是在已经部署第一个解决方案后才发现它,因此尚不清楚。无论如何,一切似乎都在按照现在的状态运作。