我在docker swarm环境中搭建了一个开发环境,它由2个节点、一些网络和一些微服务组成。以下给出了它在集群中的外观示例。
Service Network Node Image Version
nginx reverse proxy backend, frontend node 1 latest stable-alpine
Service A backend, database node 2 8-jre-alpine
Service B backend, database node 2 8-jre-alpine
Service C backend, database node 1 8-jre-alpine
Database postgresql database node 1 latest alpine
服务是带有 boot-data-jpa 的 spring boot 2.1.7 应用程序。上述所有服务都包含与 postgresql 实例的数据库连接。对于数据库,我仅在 application.properties 中配置了以下属性:
spring.datasource.url
spring.datasource.username
spring.datasource.password
spring.datasource.driver-class-name
spring.jpa.hibernate.ddl-auto=
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
一段时间后,我发现 postgresql 中的连接限制超出了,这不允许创建新连接。
2019-09-21 13:01:07.031 1 --- [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Cannot acquire connection from data source org.postgresql.util.PSQLException: FATAL: sorry, too many clients already
当我尝试通过 ssh 连接到数据库时,也会显示类似的错误。
psql: FATAL: sorry, too many clients already
到目前为止我尝试过的:
spring.datasource.hikari.leak-detection-threshold=20000
这没有帮助。
我找到了这个问题的几个答案,例如:
增加postgresql中的连接限制
不,我不想这样做。这只是一个临时解决方案。它会再次污染连接,但可能会稍后。
在 hikaripCP 配置中添加空闲超时
hikariCP的默认配置已经是10分钟的默认值,这没有帮助
将最大使用寿命添加到 hikariCP 配置中
hikariCP的默认配置已经是30分钟的默认值,这没有帮助
减少 hikariCP 配置中的空闲连接数量
hikariCP的默认配置已经是默认值10,这没有帮助
在 hikariCP 配置中设置最小空闲时间
默认为 10,我对此很满意。
我预计服务连接数约为 30 个,但我发现有近 100 个连接。重新启动或停止服务也不会关闭空闲连接。您有什么建议?这是 docker 特定的问题吗?有人遇到同样的问题吗
我也面临同样的问题,请问你找到解决办法了吗?