软件环境: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