【问题标题】:Connection pool getting exhausted连接池耗尽
【发布时间】:2017-07-10 21:41:24
【问题描述】:

我有一个 spring boot,使用 java 应用程序休眠。我将它部署在具有多个实例的码头网络服务器上。如果我有太多(超过 10 个)实例,我会得到 ​​p>

com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: FATAL: remaining connection slots are reserved for non-replication superuser connections

许多连接(10x 实例)显示为空闲

ps:

postgres  9104  0.0  0.0 248968  4392 ?        Ss   08:07   0:00 postgres: user my_db 127.0.0.1(60095) idle                        

实例的 Hikari 跟踪日志:

2017-02-21 10:59:47.578  DEBUG 7401 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)

设置

 hikari.leakDetectionThreshold: 30000

不记录任何有趣的东西。我觉得这看起来很有趣HikariCP - connection is not available

有什么想法可以调试吗?我也在 java 7 上,所以 hikari 2.4.7

【问题讨论】:

    标签: java spring postgresql hibernate hikaricp


    【解决方案1】:

    我认为您必须在 PostgreSQL 配置中增加 max_connections 参数。

    https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

    您不能允许池保持比您的 PostgreSQL 安装所允许的更多的连接。

    【讨论】:

    • 或者降低池中的最大连接数。
    • 如果您有连接泄漏,您的连接池应该拒绝创建更多连接。您问题中的错误消息表明是数据库拒绝这样做,因此显然您的连接池允许的连接数比您的数据库多。
    • @ammoQ 显然他有几个应用程序实例,所以10 x instances > postgres_max_connections。在增加与 postgres 的最大连接数之前,我可能会考虑降低池大小(或者至少始终保持少于 10 个实例空闲),除非他有一个非常强大的服务器供数据库运行。
    • @Kayaman:这两种方式都是可能的。这取决于应用程序真正需要多少连接才能顺利运行。如果存在连接泄漏,无论如何可能的连接数都不够。
    • 他似乎没有连接泄漏,因为他在部署超过 10 个实例时遇到错误(超过 100 个连接被池化)。我会将最小池大小设置为较低的值(例如 5),并将最大池大小设置为可能更大的值,具体取决于使用模式。
    猜你喜欢
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-24
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多