【问题标题】:PostgreSQL JDBC Connection issuePostgreSQL JDBC 连接问题
【发布时间】:2019-08-19 18:04:30
【问题描述】:

我们在 ubuntu 18.04 机器上有 PostgreSQL 9.6 实例。当我们重新启动部署在 Kubernetes 集群中的 java 服务时,已经存在的空闲连接不会被删除,并且服务会在每次重新启动时创建新连接。因此,我们已经多次达到连接限制,每次都必须手动终止连接。相同的服务版本部署在其他实例上,但我们没有在其他服务器上遇到这种情况。

我对此有一些疑问

  1. 可能是 PostgreSQL 配置问题吗?但是,我在 2 个实例中没有发现任何与超时相关的设置差异(1 个工作正常,另一个没有)

  2. 如果这是 java 服务问题,我应该检查什么?

  3. 如果它既不是 PostgreSQL 问题也不是 java 问题,那么我应该查看什么?

【问题讨论】:

  • 2.检查重启后运行的 java 进程数。

标签: java postgresql kubernetes connection-pooling


【解决方案1】:

如果客户端进程在没有正确关闭数据库连接的情况下死亡,服务器需要一段时间(默认为 2 小时)才能注意到连接已死亡。

TCP 提供的机制称为keepalive:在一定的空闲时间后,操作系统开始发送keepalive 数据包。一定数量的此类数据包无响应后,TCP连接关闭,数据库后端进程将死。

要让 PostgreSQL 更快地检测到死连接,请将 postgresql.conf 中的 tcp_keepalives_idle 参数设置为小于 7200 秒。

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 2023-03-27
    • 2012-12-24
    • 2011-04-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多