postgres数据库连接超时问题处理
在操作系统层面
Keepalive 是 TCP 协议的一项功能。当您在TCP network socket中使用SO_KEEPALIVE选项时,一旦socket idle,计时器就会开始运行。当**keepalive idle time* *到期,并且socket上没有进一步的活动时,kernel内核将向通信伙伴发送一个“keepalive数据包”。如果对方回答,则认为连接良好,计时器再次开始运行。
如果没有应答,内核等一个keepalive间隔(keepalive interval ),再发送另一个keepalive packet探活。
重复此过程,直到发送的数据包量达到 keepalive count。如果之后(还是无应答),连接就被认为是结束了,再尝试使用network socket就会报错。
在数据库层面
设置配置参数tcp_keepalives_idle,tcp_keepalives_interval以及tcp_keepalives_count(Windows 不支持最后一个)来更改所有服务器套接字的设置。
参数 | 默认值 | 注解 |
---|---|---|
tcp_keepalives_idle | 7200 | 指定不活动多少秒之后通过 TCP 向客户端发送一个 keepalive 消息。 0 值表示使用默认值。这个参数只有在支持TCP_KEEPIDLE或TCP_KEEPALIVE符号的系统或 Windows 上才可以使用。在其他系统上,它必须为零。在通过 Unix 域套接字连接的会话中,这个参数被 |