PostgreSQL JDBC 连接问题



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

我对此有一些疑问

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

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

  3. 如果它既不是PostgreSQL问题也不是Java问题,那么我应该研究什么?

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

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

要使 PostgreSQL 更快地检测死连接,请将tcp_keepalives_idle参数设置为postgresql.conf秒以内 7200 秒。

最新更新