Java 连接不可用,请求在 30000 毫秒后超时

Java Connection is not available, request timed out after 30000ms

这是什么?

o.h.e.jdbc.spi.SqlExceptionHelper:  chatbotPrechatDS - Connection is not available, request timed out after 30000ms.

我在aws elastic beanstalk中部署了一个应用程序java 8,我们有两台服务器来托管这个应用程序,还有一个RDS mysql.

光版本:

<hikaricp.version>4.0.3</hikaricp.version>

配置:

  connection-timeout: 600000
  maximum-pool-size: 500
  max-lifetime: 1800000
  minimum-idle: 20
  validation-timeout: 3000
  idle-timeout: 60000

这个错误可能与高内存消耗有关吗?

根据我的经验,“连接不可用”错误与连接池用完所有插槽有关。它与无法连接到数据库服务器无关。数据库服务器可能很乐意接受更多连接(最多 max_connections),但是 Java 客户端的连接池太小了。

也就是说,您的连接池大小似乎为 500,这对于几乎任何应用程序来说都应该足够了。连接池的思想是少量的连接可以在更多的客户端线程之间共享。

这 运行 的麻烦在于客户端线程保持连接的时间过长。

这可能是代码设计问题。您应该在使用完连接后将连接释放回连接池,即使线程未完成运行其他代码。

另一个可能的问题是线程仍在执行 SQL 查询,因为它们优化不佳。因此它无法足够快地完成使用数据库连接来处理对应用程序的请求率增加,很快池中的所有连接都会被占用。解决方案是逐一优化您的查询,从耗时过长的查询或 运行 最频繁的查询开始。