当前位置: 首页 > 知识库问答 >
问题:

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

司马高韵
2023-03-14

我正在为API使用Spring boot 2,托管在aws ecs fartate上。数据库在RDS上是postrix 10.6,具有16 GB内存和4个cpu。

我的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时,最大查询执行时间为

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

spring.datasource.hikari.leakDetectionThreshold=2000

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

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

共有1个答案

邵沛
2023-03-14

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

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

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

另请参阅为PostgreSQL配置HikariCP

 类似资料:
  • 我也尝试过直接指定检索到的凭据,但没有成功: 此外,我尝试在容器中烘烤aws cli,并且从内部尝试、和-仍然挂起而没有响应。我已经授予任务执行角色的完全管理访问权限-仍然没有成功。我可以从EC2容器实例中检索机密,但不能从挂载的容器中检索机密。

  • 我使用Java nio编写了一个服务器(类似于这里的一个)和客户机代码。 我正在努力实现尽可能多的联系。根据之前的建议,我减缓了客户端创建过程,给操作系统(Windows 8)足够的时间来处理请求。 我在不同的机器上运行客户端代码,以便服务器拥有所有可用的运行空间。 当我尝试创建10000个连接时,大约8500个连接被连接,其余的连接被拒绝,客户端(客户端代码中的线程)的连接被拒绝的情况发生得更多

  • 帮帮我!我有一个restful API链接,我使用邮差工具调用成功,但当我在eclipse上编写restful客户端时,它失败了。我试过代理,但没有成功。 输出: 线程“main”com.sun.jersey.api.client.clientHandlerException中出现异常:

  • 问题内容: 我正在尝试使用连接到RDS数据库的Node.js编写Lambda函数。该数据库正在运行,并且可以从我的Elastic Beanstalk环境访问。当我运行该函数时,它将返回超时错误。 尝试将超时延长到5分钟,结果完全相同。 经过一些研究,我得出的结论是,这可能是一个安全问题,但无法在Amazon文档或此答案中找到解决方案(这是我只能在该主题上找到的解决方案)。 以下是安全性详细信息:

  • 我正在尝试使用 Node 编写一个 Lambda 函数.js该函数连接到我的 RDS 数据库。该数据库正在运行,可以从我的 Elastic Beanstalk 环境访问。当我运行该函数时,它返回超时错误。 尝试将超时增加到 5 分钟,结果完全相同。 经过一些研究,我得出的结论是,这可能是一个安全问题,但在亚马逊的留档或这个答案中找不到解决方案(这是我在这个话题上唯一能找到的答案)。 以下是安全详细

  • 我已经掌握了java.sql。SQLTransientConnectionException:springHikariCP-连接不可用,请求在30001ms后超时。 第一个代码块工作良好,第二个(CP)不工作。 什么是错的,如何解决这个问题? JDK - 1.8.0_73。 HikariCP-2.4.5。 Spring4.2.5。释放。 大脑性麻痹