使用 Spring Boot 的 docker-swarm 中的 postgresql 中的客户端过多

问题描述 投票:0回答:1

我在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 特定的问题吗?有人遇到同样的问题吗

postgresql spring-boot spring-data-jpa docker-swarm hikaricp
1个回答
0
投票

我也面临同样的问题,请问你找到解决办法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.