【问题标题】:Why does Spring Boot WEB take to respond more faster?为什么 Spring Boot WEB 响应速度更快?
【发布时间】:2019-11-16 20:38:52
【问题描述】:

我通常使用 Spring Boot + JPA + Hibernate + Postgres。

在开发 WEB 应用程序结束时,我在 Jar 中编译,然后直接使用 Java 运行它,然后使用 Apache (httpd) 进行反向代理。

我注意到启动时没有问题或延迟,访问网站时它运行得非常快,但是当几个小时过去没有任何人向服务器发出请求然后我想访问时,我必须等待至少 20直到服务器响应几秒钟后,我才能继续正常访问该站点。

为什么会发生这种情况?,就好像 Spring 每次检测到它没有负载请求时都处于待机模式,但我不确定是这样还是有问题。如果它是一些原生的 spring 功能,我该如何禁用它?

虽然我需要在空闲状态下使用更多内存,但无论是否加载,我都希望答案很快。

【问题讨论】:

    标签: java apache spring-boot centos7


    【解决方案1】:

    在不了解更多信息的情况下,很可能当您的 web 应用处于空闲状态时,您服务器上的其他程序正在使用内存并导致 JVM 内存被交换到磁盘。

    当您再次访问 web 应用程序时,操作系统必须将 JVM 内存换回 RAM,一次一页。这需要时间,但是一旦内存回到 RAM 中,您的 webapp 就会正常运行。

    不幸的是,Java 内存的工作方式,将 JVM 内存交换到磁盘非常不利于性能。对于大多数依赖垃圾收集器来释放内存的语言来说,这是一个问题。具有手动内存管理的语言,例如当内存交换到磁盘时,C++ 代码通常不会受到那么严重的影响,因为在这些语言中内存使用更加“集中”。

    解决方案:如果我对您的问题原因的猜测是正确的,请重新配置您的服务器,以便 JVM 内存不会被交换到磁盘。

    请注意,当我说服务器时,我指的是物理机。您的 JVM 正在争夺内存的“其他程序”可能在不同的虚拟机中运行,即不在同一个操作系统中。

    【讨论】:

    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 2020-05-23
    • 2020-09-15
    • 2019-01-25
    • 2020-05-14
    • 1970-01-01
    • 2014-11-02
    • 2012-12-20
    相关资源
    最近更新 更多