我們剛剛過渡到使用 Docker 進行開發,并且正在使用該ubuntu:18.04映像。我們注意到psycopg2幾分鐘后使用的查詢失敗了。這個答案使用以下keepalives引數解決了這個問題:
self.db = pg.connect(
dbname=config.db_name,
user=config.db_user,
password=config.db_password,
host=config.db_host,
port=config.db_port,
keepalives=1,
keepalives_idle=30,
keepalives_interval=10,
keepalives_count=5
)
這也適用于我們,但為什么會這樣呢?psycopg2 檔案沒有深入了解引數的作用,但是,這個第三方檔案和這個 postgres檔案都有。
問題是,docker 環境與主機環境有什么不同,需要這些非默認設定?它們也可以在標準的 Ubuntu 18.04 環境中作業,但不能在 docker 中作業。我希望我們可以重新配置我們的 docker 鏡像,這樣一開始就不需要這些非標準引數。
Postgres 版本:PostgreSQL 13.4 (Ubuntu 13.4-1.pgdg20.04 1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit
psycopg2 版本:2.8.5
主機作業系統:Windows 10
Docker 映像作業系統:Ubuntu 18:04
uj5u.com熱心網友回復:
您可能正在使用 Dockers 覆寫網路功能,該功能基于 Linux IP 虛擬服務器 (IPVS),并使用默認的 900 秒(15 分鐘)超時來處理空閑 TCP 連接。
見:https ://github.com/moby/moby/issues/31208
默認的 Linux TCP Keep-Alive 設定僅在很久以后才開始發送資料包(如果完全啟用),因此您可以選擇:
- 更改服務器或客戶端上的 TCP Keep-Alive 設定
- 更改 Docker 網路以直接使用主機網路
- 更改您的軟體以避免空閑 TCP 連接,例如為資料庫配置連接池以洗掉空閑連接或更頻繁地檢查運行狀況
- 更改內核 IPVS 默認值或 TCP 默認值
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/437312.html
標籤:PostgreSQL 码头工人 心理咨询师2
上一篇:在SQL中按日期計算累積百分比
