的情況:Debian的服務器上TCP存活不工作
- 的Postgres 9.1 用LISTEN/NOTIFY機制
- 斯卡拉(Java)的應用程序通過JDBC
得到通知由於可能通知之間非常長的停頓時間(多播時間)我遇到了一段時間後底層TCP連接悄然終止並且我的應用程序停止接收通知的問題。
當找到解決方案時,我發現可以在連接上設置參數tcpKeepAlive
。所以我把它設置爲true
,很高興。直到第二天,我再次看到我的聯繫已經死亡。
正如我一直懷疑有平行現在證明是非常有用的運行Wireshark的捕獲。在感興趣的連接上的最後一次成功通信之後大約兩個小時,我的應用程序會向數據庫服務器發送一個保持連接的數據包。但服務器迴應RST
,因爲它似乎已經關閉了連接。
在服務器上的net.ipv4.tcp_keepalive_time
被設置爲7200,其爲2小時。
我需要以某種方式啓用服務器上的Keepalive或增加keepalive_time
?
這是關於保持我的應用程序連接的方式嗎?
TL; DR:長時間不活動後,我的數據庫連接終止。設置tcpKeepAlive
沒有修復它,因爲服務器響應RST
。該怎麼辦?
你是否在某種NAT防火牆或路由器後面?如果是這樣,兩個小時可能不夠頻繁。 –
@CraigRinger我不知道託管服務提供商如何組織他的網絡。但是我怎樣才能提高頻率?我沒有看到這樣做的參數。 – mgttlinger
我不認爲PgJDBC目前提供任何控制,所以您必須將其設置爲操作系統級別。 –