首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Postgresql中使用tcp_keepalives设置?

问如何在Postgresql中使用tcp_keepalives设置?
EN

Stack Overflow用户
提问于 2010-01-30 12:34:30
回答 1查看 28.6K关注 0票数 13

Postgresql有3个用于管理丢弃连接的keepalive设置(在postgresql.conf中):

tcp_keepalives_count

tcp_keepalives_idle

tcp_keepalives_interval

默认情况下,这些值为0。

我想要的行为是Postgresql在一段时间后断开客户端连接,如果客户端失去网络连接或进入睡眠状态。

我目前使用的是这些值:

tcp_keepalives_count =1

tcp_keepalives_idle = 60

tcp_keepalives_interval = 60

我在Mac上运行的是PostgreSQL 8.4,但似乎没有任何效果。我的测试是锁定表中的一行(使用SELECT FOR UPDATE)并断开工作站与网络的连接。但在Postgresql中,我仍然看到该工作站持有锁。

我期望在时间过去之后(在本例中为60秒),连接将被终止,锁将被释放。

要么是我做错了什么,要么是我完全误解了这是如何工作的。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2010-02-03 02:35:19

我认为你需要配置你的操作系统。目前还不支持通过程序更改keepalive参数。这应该会对你有所帮助:

Using TCP keepalive to Detect Network Errors

此外,您的参数选择也不正确。如果tcp_keepalives_count=1正常工作,那么即使一个丢失的keepalive数据包也会断开您的连接。而且单个数据包经常丢失。我会在MacOSX/FreeBSD上的/etc/sysctl.conf中使用以下内容:

net.inet.tcp.keepidle = 60000

net.inet.tcp.keepintvl = 10000

然后,操作系统将在断开连接后最多140秒(60秒的空闲+ 10秒间隔内的8个保持连接数据包)断开连接。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2166872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档