【问题标题】:Java server application slow after period of idleness (Windows)Java 服务器应用程序在闲置期后变慢(Windows)
【发布时间】:2025-11-25 10:10:01
【问题描述】:

我在使用 Jetty 9 服务器应用程序时遇到问题,该应用程序似乎在较长时间的闲置后进入某种静止状态。通常 Java 进程的内存使用量约为 500 MB,但在空闲一段时间后,它似乎下降到不到 50MB。出现的第一个请求最多需要几秒钟才能响应,而请求通常在几十毫秒的范围内。但在一两次请求之后,应用程序似乎又回到了正常的响应状态。

我在 32 位 Oracle Java 8 JVM 上运行。我的 JVM 配置非常基础:

java -server -jar start.jar

我希望这个问题可以通过 JVM 配置来解决。有谁知道是否有任何特定参数可以禁用这种行为?

编辑:根据 Ivan 的评论,我能够确定问题的根源。原来 Windows 正在将部分 Java 进程交换到磁盘。有关我的解决方案的说明,请参阅下面我自己的答案。

【问题讨论】:

  • 您可以尝试添加-Xms500m
  • 看起来您的内存已被换出(或其他操作系统级别的东西)。在这里查看相同的问题*.com/questions/43464971/… 有关更多信息,请提供操作系统信息和交换使用情况。

标签: java windows performance optimization jvm


【解决方案1】:

根据 Ivan 的评论,我能够确定问题的根源。原来 Windows 正在将部分 Java 进程交换到磁盘。将私有工作集与任务管理器中的提交大小进行比较时,这一点清晰可见。

我对此的解决方案有两个。首先,我在我的服务器应用程序中创建了一个简单的计划作业,该作业每分钟运行一次,并进行简单的测试运行,以确保重要的服务永远不会长时间处于非活动状态。我希望这能确保 Windows 不会将相关页面视为非活动页面。

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

【讨论】:

    最近更新 更多