Postgres 似乎正在丢失来自客户端的连接。客户端收到错误,通常是服务器关闭了连接,同时服务器收到日志条目。示例:
Nov 14 17:54:15 dev-db0 postgres[29523]: [219-1] 2014-11-14 17:54:15 GMT [29523]: [2-1] user=******,db=******,remote=10.0.13.1(51491) LOG: could not receive data from client: Connection timed out
据我所知,这种情况主要发生在 Windows 客户端上,并且发生在多个不同的数据库服务器(物理和虚拟)上。我第一次意识到这个问题是在用户尝试通过 VPN 访问 postgres 时遇到问题,但检查日志显示这种情况也会发生在本地客户端上,尽管 VPN 似乎更频繁地发生这种情况。
我已尝试了 postgresql.conf 中的所有 keepalive 设置(tcp_keepalives_idle
,tcp_keepalives_interval
和tcp_keepalives_count
)以及通过 SSH 建立数据库连接隧道,但似乎都没有任何区别。
虽然服务器端显示超时,但客户端通常显示对等方重置连接或类似情况。重现该问题的最可靠方法是运行大型/长查询;pgadmin 和 tomcat 似乎比 psql 更容易受到该问题的影响。