Spring boot 当aws中并发api调用超过10000时,Spring book 2 Hikari连接不可用

Spring boot 当aws中并发api调用超过10000时,Spring book 2 Hikari连接不可用,spring-boot,connection-pooling,hikaricp,Spring Boot,Connection Pooling,Hikaricp,我使用SpringBoot2forAPI,托管在aws ecs fargate上。数据库在RDS上为postgress 10.6,具有16GB ram和4CPU 我的hikari配置如下: spring.datasource.testWhileIdle = true spring.datasource.validationQuery = SELECT 1 spring.datasource.hikari.maximum-pool-size=100 spring.datasource.hikari

我使用SpringBoot2forAPI,托管在aws ecs fargate上。数据库在RDS上为postgress 10.6,具有16GB ram和4CPU

我的hikari配置如下:

spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.datasource.hikari.maximum-pool-size=100
spring.datasource.hikari.minimum-idle=80
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.idle-timeout=500000
spring.datasource.hikari.max-lifetime=1800000
现在,一般来说,这是完美的。。但当服务器上出现负载时,比如说大约5000个并发API请求(虽然也不是很大),我的应用程序就会崩溃。 已为hikari启用调试日志。。因此,获得以下信息:

hikaripool-1 - pool stats (total=100 active=100 idle=0 waiting=100)
异常消息表示连接不可用:

HikariPool-1 - Connection is not available, request timed out after 30000ms.
org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC
同时当我看到RDS postgress performance insighter时,最大查询执行时间<0.03秒..CPU利用率也低于50%。因此,数据库服务器没有问题

我只使用EntityManager和JPA。。通过手动打开连接不使用任何查询。所以关闭连接或连接泄漏可能不是问题。但启用泄漏检测后:

spring.datasource.hikari.leakDetectionThreshold=2000
在日志中获取警告,表示检测到明显的连接泄漏: 当我检查指向此错误的方法时:那么它就是JPA findById()方法

那么,连接不可用和仅10k api请求超时的根本原因是什么呢。。池大小为100。。为什么在活动连接变为100并且等待时间变为100后,它不释放任何连接?我的ECS应用程序服务器会自动重新启动并出现此错误,只有在5-7分钟后才可访问。

建议在测试过程中出现峰值需求时删除
minimumIdle

为了获得最佳性能和响应峰值需求,我们建议不要设置此值,而是允许HikariCP充当固定大小的连接

如果你移除它。空闲超时也是不相关的

另请参见

在测试过程中出现峰值需求时,建议删除
minimumIdle

为了获得最佳性能和响应峰值需求,我们建议不要设置此值,而是允许HikariCP充当固定大小的连接

如果你移除它。空闲超时也是不相关的


另见

这似乎可以理解。。但如果我将其删除,则默认值为最大池大小,即100。。所以在我的例子中,是80。。所以这不应该是个问题。。当负载到来时,空闲连接为0。。活动为100,等待为100100@MihirShah你在使用hibernate吗?这似乎是可以理解的。。但如果我将其删除,则默认值为最大池大小,即100。。所以在我的例子中,是80。。所以这不应该是个问题。。当负载到来时,空闲连接为0。。活动为100,等待为100100@MihirShah你在使用hibernate吗?另见