Hikari连接池,连接不可用

时间:2017-10-23 11:43:07

标签: java spring hibernate transactional hikaricp

我有线程系统。 7000线程处理一些复杂的任务。

我们有java解决方案:spring,hibernate for persistence,log4j2,hikari连接池用于db访问(用bean加载和管理)

我之前设置了Hikari连接池大小%30的线程大小。但我们得到了这个 连接不可用,请求在30025ms后超时...... 错误。在此错误后,我无法修复服务停止。我尝试将db pool size增加到8000。

因此线程大小为:7000,db pool size为:8000 ..

但即时通讯让这个错误出乎意料。发生了什么?有人可以解释为什么数据库连接不会启用此服务吗?

我读过大多数用户使用最小池大小示例20.000线程运行其服务但只有20 db池大小。怎么办?你能解释一下,我的服务设计问题是什么。

是的,我有@Transactional注释,并且在复杂的拍摄中需要很多功能。这有问题吗?点是这个吗?

你能帮我找到主要问题是什么吗?

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC 

Connection at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)

Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

Caused by: java.sql.SQLTransientConnectionException: springHikariCP - Connection is not available, request timed out after 30025ms.

Caused by: java.sql.SQLException: Network error IOException: Address already in use: connect

Caused by: java.net.BindException: Address already in use: connect

1 个答案:

答案 0 :(得分:0)

仅仅因为您允许程序使用数千个同时连接到数据库,并不意味着数据库可以处理它们。这就是为什么在一段时间后(在几十个或几百个连接中)增加连接会产生反效果。

您可以配置等待免费连接的超时(在您的示例中为30秒),但它不会改变这样一个事实:如果您尝试在规模较小的服务器上做很多事情,那么您将会陷入困境。

获取更大的数据库(或扩展),使用更少的线程或尝试在数据库中查找可以优化的性能热点。