天天看點

資料庫使用psql及jdbc進行遠端連接配接,不定時自動斷開的解決辦法

瀚高資料庫

目錄

環境

症狀

問題原因

解決方案

環境

系統平台:Linux x86-64 Red Hat Enterprise Linux 7,Linux x86-64 Red Hat Enterprise Linux 6,銀河麒麟U系(CPU飛騰)4

版本:4.5

症狀

瀚高資料庫在使用psql工具以及jdbc進行遠端連接配接時,在經過一定時間之後報錯-緻命錯誤:terminating connection due to client no input timeout。

排查安全參數,hg_clientnoinput = 0;

問題原因

作業系統TCP相關參數設定不正确,資料庫沿用作業系統配置,導緻TCP保活機制未生效。

解決方案

資料庫做如下配置後,問題解決:

#以下參數預設值都為0,表示延用伺服器的配置情況。

tcp_keepalives_idle = '60'

tcp_keepalives_interval = '20'

tcp_keepalives_count = '10'      

參數相關說明:

  • tcp_keepalives_idle

    ​ (​

    integer

    ​)

    規定在作業系統向用戶端發送一個TCP keepalive消息後無網絡活動的時間總量。 如果指定值時沒有機關,則以秒為機關。值0(預設值)表示選擇作業系統預設值。 指定不活動多少秒之後通過 TCP 向用戶端發送一個 keepalive 消息。 0 值表示使用預設值。 這個參數隻有在支援​

    TCP_KEEPIDLE

    ​或等效套接字選項的系統或 Windows 上才可以使用。在其他系統上,它必須為零。在通過 Unix 域套接字連接配接的會話中,這個參數被忽略并且總是讀作零。
  • tcp_keepalives_interval

    ​ (​

    integer

    ​)

    規定未被用戶端确認收到的TCP keepalive消息應重新傳輸的時間長度。 如果指定值時沒有機關,則以秒為機關。值0(預設值)表示選擇作業系統預設值。 這個參數隻有在支援​

    TCP_KEEPINTVL

    ​或等效套接字選項的系統或 Windows 上才可以使用。在其他系統上,必須為零。在通過 Unix域套接字連接配接的會話中,這個參數被忽略并總被讀作零。
  • tcp_keepalives_count

    ​ (​

    integer

    ​)

    指定伺服器到用戶端的連接配接被認為中斷之前可以丢失的TCP keepalive消息的數量。值0(預設值)表示選擇作業系統預設值。 這個參數隻有在支援​

    TCP_KEEPCNT

    ​或等效套接字選項的系統上才可以使用。在其他系統上,必須為零。在通過 Unix 域套接字連接配接的會話中,這個參數被忽略并總被讀作零。
  • tcp_user_timeout

    ​ (​

    integer

    ​)

    指定傳輸的資料在TCP連接配接被強制關閉之前可以保持未确認狀态的時間量。 如果指定值時沒有機關,則以毫秒為機關。值0(預設值)表示選擇作業系統預設值。 這個參數隻有在支援​

    TCP_USER_TIMEOUT

    ​的系統上才被支援;在其他系統上,它必須為零。 在通過Unix-domain 套接字連接配接的會話中,此參數将被忽略并且始終讀取為零。
[root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time
[root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_intvl

[root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_probes      

繼續閱讀