繁体   English   中英

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

此错误可能与高 memory 消费有关吗?

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

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

当客户端线程保持连接的时间过长时,就会遇到麻烦。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM