Springboot Hikari Centos 首次连数据库很慢
前言:
springboot项目默认使用了hikari作为数据库连接池,在开发机器上一切正常.
但是把程序部署到Centos7 x64上之后发现,每次首页登录的时候都要停顿几十秒.
于是,在程序启动后, 迅速执行ps -ef|grep java获取到程序的pid,然后在首页点击了几下登录, 再然后执行jstack <pid> > 123.txt获取程序堆栈信息.
以下只是一部分信息,从以下信息中可以看到好几个线程都是阻塞状态, 都在等待锁, 而锁住的线程指向了SecureRandom
"Thread-8" #36 prio=5 os_prio=0 tid=0x00007fab159e5800 nid=0x4b2b runnable [0x00007faad91cb000]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileInputStream.readBytes(Native Method)
	at java.io.FileInputStream.read(FileInputStream.java:255)
	at sun.security.provider.SeedGenerator$URLSeedGenerator.getSeedBytes(SeedGenerator.java:539)
	at sun.security.provider.SeedGenerator.generateSeed(SeedGenerator.java:144)
	at sun.security.provider.SecureRandom$SeederHolder.<clinit>(SecureRandom.java:203)
	at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:221)
	"- locked <0x00000000d82b9b80> (a sun.security.provider.SecureRandom) 问题所在"
	at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
	at oracle.security.o5logon.O5Logon.a(Unknown Source)
	at oracle.security.o5logon.O5Logon.<clinit>(Unknown Source)
	at oracle.jdbc.driver.T4CTTIoauthenticate.<init>(T4CTTIoauthenticate.java:582)
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:401)
	at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
	at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136)
	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)
	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198)
	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541)
	at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
	"- locked <0x00000000eeb7c898> (a com.zaxxer.hikari.HikariDataSource) "
	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:157)
"http-nio-8080-exec-1" #23 daemon prio=5 os_prio=0 tid=0x00007fab1593b000 nid=0x4b1f waiting for monitor entry [0x00007faaf4313000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:107)
	"- waiting to lock <0x00000000eeb7c898> (a com.zaxxer.hikari.HikariDataSource) "
	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:157)
"http-nio-8080-exec-2" #24 daemon prio=5 os_prio=0 tid=0x00007fab15995800 nid=0x4b20 waiting for monitor entry [0x00007faaf4212000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:107)
	"- waiting to lock <0x00000000eeb7c898> (a com.zaxxer.hikari.HikariDataSource)"
	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:157)
从以上可以看到,问题出在SecureRandom处, 网上查询后, 发现很多Java程序在Linux下都需要把获取随机数的方式从 /dev/random改为/dev/urandom .
参考https://blog.csdn.net/weixin_40581980/article/details/81630501后, 我在启动脚本中加入了参数 java -Djava.security.egd=file:/dev/urandom -jar my.jar, 重启后,发现问题解决.
Springboot Hikari Centos 首次连数据库很慢的更多相关文章
- SpringBoot项目启动时链接数据库很慢
		
SpringBoot项目启动时链接数据库很慢 springboot项目在启动时候,如下图所示,链接数据库很慢 解决方法:在mysql 的配置文件中 配置 skip-name-resolve
 - Centos下MongoDB数据库的安装以及配置开机自启动(三)
		
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 在服务器上完全可以用yum来安装管 ...
 - 用SpringBoot+MySql+JPA实现对数据库的增删改查和分页
		
使用SpringBoot+Mysql+JPA实现对数据库的增删改查和分页 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述 ...
 - centos中Mysql数据库导入sql文件
		
1.对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库. mysql>create database Student; 2.切换到需要导入sql文件的数据库 mysql ...
 - 远程访问CENTOS的MYSQL数据库设置
		
远程访问CENTOS的MYSQL数据库设置 mysql -u root grant all privileges on *.* to root@'%'identified by 'root'; 后面的 ...
 - 内网其他服务器节点连接Mysql数据库很慢的解决方案
		
一.概述 使用jdbc方式对数据进行同步时,由于设置了数据库登录超时时间是10s,结果发现有的服务器节点可以连接,有的服务器节点不能连接Mysql数据库.排查了好长原因,最后,自己写了一个jdbc的测 ...
 - JAVA - SpringBoot项目引用MyBatis操作数据库
		
JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...
 - SpringBoot系列: 使用 flyway 管理数据库版本
		
Flyway 和 Liquibase 都是 Java 项目中常用的 DB migration 工具, 从使用简便性看,Flyway 比 Liquibase 更简单, 从 github 的 star ...
 - centos 安装mysql数据库
		
在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1 下载并安装MySQL官方的 Yum Re ...
 
随机推荐
- C++ STL——常用算法
			
目录 一 常用查找算法 二 常用遍历算法 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 常用查找算法 /* find算法 查找元素 @param ...
 - [go]etcd使用
			
// 连接etcd import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/mvcc/mvc ...
 - ERROR 1292(22007)
			
ERROR 1292(22007) Table of Contents 1. 1292 1.1. 22007 1 1292 1.1 22007 错误信息 ERROR 1292 (22007): T ...
 - python之crawlspider初探
			
注意点: """ 1.用命令创建一个crawlspider的模板:scrapy genspider -t crawl <爬虫名> <all_domain ...
 - chrome调试笔记
			
F12启动调试 1.右键加载按钮可以清空缓存并重新加载,有时候浏览器有缓存,代码更新不会及时反映出来. 2.performance mointer实时查看performance 点击三个竖着的小点,选 ...
 - 数据分析电子商务B2C全流程_数据分析师
			
数据分析电子商务B2C全流程_数据分析师 目前,绝大多数B2C的转化率都在1%以下,做的最好的也只能到3.5%左右(比如以卖图书为主的当当) 我想,所有的B2C都会关心三个问题:究竟那97%去了哪里? ...
 - Redis之快速入门与应用[教程/总结]
			
内容概要 因为项目中用户注册发送验证码,需要学习redis内存数据库,故而下午花了些时间进行初步学习.本博文性质属于对今日redis学习内容的小结.在看本博文前或者看完后,可以反问自己三个问题:Red ...
 - 关于Linux系统打开最大文件数量
			
今天做压力测试 客户端数据提到2000人,在这个过程中,遇到了分配socket失败的问题提示 errno:24 Too many open files查找资料后发现是Linux系统配置了打开文件的最大 ...
 - 【ABAP系列】SAP MAC GUI750安装过程
			
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP MAC GUI750安装 ...
 - linux下配置maven并修改maven源
			
参考文章 <Linux下Maven的安装与使用> <aliyun阿里云Maven仓库镜像地址> <maven国内镜像配置(Ubuntu)> 下载maven,具体目录 ...