Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么SpringBootWeb需要更快的响应?_Java_Apache_Spring Boot_Centos7 - Fatal编程技术网

Java 为什么SpringBootWeb需要更快的响应?

Java 为什么SpringBootWeb需要更快的响应?,java,apache,spring-boot,centos7,Java,Apache,Spring Boot,Centos7,我通常使用SpringBoot+JPA+Hibernate+Postgres 在WEB应用程序开发的最后,我在Jar中编译,然后直接用Java运行它,然后用Apache(httpd)执行反向代理 我注意到,当开始时没有问题或延迟,当访问网站时,它工作得非常快,但当几个小时过去,没有人向服务器发出请求,然后我想访问时,我必须至少等待20秒,直到服务器响应,之后我可以继续正常访问网站 为什么会发生这种情况?每次Spring检测到没有请求负载时,它就好像处于待机模式,但我不确定这是真的还是一个问题。如

我通常使用SpringBoot+JPA+Hibernate+Postgres

在WEB应用程序开发的最后,我在Jar中编译,然后直接用Java运行它,然后用Apache(httpd)执行反向代理

我注意到,当开始时没有问题或延迟,当访问网站时,它工作得非常快,但当几个小时过去,没有人向服务器发出请求,然后我想访问时,我必须至少等待20秒,直到服务器响应,之后我可以继续正常访问网站

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


尽管我需要在空闲状态下使用更多的内存,但我希望无论是否加载,都能快速得到答案。

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

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

不幸的是,按照Java内存的工作方式,将JVM内存交换到磁盘对性能非常不利。对于大多数依赖垃圾收集器释放内存的语言来说,这是一个问题。当内存被交换到磁盘时,通常使用手动内存管理的语言(例如C++代码)不会受到严重影响,因为内存使用在这些语言中更为“专注”。 解决方案:如果我对问题原因的猜测是正确的,请重新配置服务器,使JVM内存不会交换到磁盘


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

谢谢,我在这里和这里找到了信息