Springboot 第一次访问慢的问题研究&解决方案

本文探讨了Springboot应用在首次访问时出现响应缓慢的问题,包括类加载耗时和懒加载的问题。分析了网络上的三种解决方案,如dispatcherServlet懒加载、数据库连接懒加载和Linux真随机数生成器修改,但这些方案并未解决问题。通过监测和分析,发现在Linux环境下类找不到导致的延迟。最后,作者通过更改Springboot打包方式解决了问题,将pom.xml中的打包类型改为war,避免使用Tomcat的classLoader,从而消除了首次访问的延迟问题。
摘要由CSDN通过智能技术生成

软件环境:springboot2.1 + spring-data-jpa+ openjdk8

问题现象

重启服务后,在用户第一次访问时,部分系统响应接口响应缓慢,有时候需要20多秒才返回,但第二次调度同一个接口则返回很快

网络分析

网络上有该问题的三个解释说法:

1、dispatcherServlet 是懒加载的
2、数据库链接是懒加载的
3、linux 下真随机数生成器

方案一:dispatcherServlet 懒加载修改

在springboot的appcation.yml 中添加如下参数即可解决

spring.mvc.servlet.load-on-startup=1

方案二:数据库链接是懒加载修改(未验证)

在springboot的appcation.yml 中添加如下参数即可解决

#最小空闲连接数量(有待考证是否会初始化10个连接)
spring.datasource.hikari.minimum-idle: 10

或者在系统启动后进行预热:在@PostConstruct方案中执行一次空查询

此种方案意图是初始化一次查询以填充缓存(orm session、mysql、redis),加快下次同样请求返回结果的速度

我使用的是jpa,并且开启了spring.jpa.open-in-view=true,orm session是每次请求重置的;也没有开启redis,解决方案对我有限

方案三:linux 下真随机数生成器修改

熵池问题:https://blog.csdn.net/wysnxzm/article/details/98482143

在java启动时增加如下参数即可

-Djava.security.egd=file:/dev/./urandom 

或者直接去修改$/jre/lib/security/java.secur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值