间歇性的“对等连接重置” SQL Postgres

After a period of inactivity, my go web service is getting a net.OpError with message read tcp x.x.x.x:52086->x.x.x.x:24414: read: connection reset by peer when executing the first postgres sql query. After the error, the subsequent requests will work fine.

The postgres database is hosted with compose.com which has haproxy in front of the postgres db. My go web app is using standard sql and sqlx.

I've tried running a ticker invoking db.Ping() every 15 minutes, but this hasn't fixed the issue.

Why is the go standard sql lib not handling these connection drops?

dqifn68206
dqifn68206 嗨,@Peter,看来可以解决问题。如果您想以此作为答案,我会给您要点。
大约 2 年之前 回复
dongyu1918
dongyu1918 是的,我想我可能也得出了类似的结论。我正在考虑设置db.SetConnMaxLifetime(time.Minute*15),我认为它应该清除死掉的连接。
大约 2 年之前 回复
doujian0265
doujian0265 大胆的猜测:与haproxy的连接仍然有效,但是与后端的连接超时并且haproxy不会关闭另一端。我已经看到过Redis的类似问题。如果您不使用haproxy会怎样?定期ping不会有太大帮助,因为无法保证两个池中的所有连接在超时之前都会看到一些流量。
大约 2 年之前 回复
duancai7568
duancai7568 嗯。。好。这里的最后一段似乎暗示了相反的意思。go-database-sql.org/errors.html
大约 2 年之前 回复
dongqian6484
dongqian6484 是的,使用Go标准库处理该问题的方法是检测连接失败,然后重试该操作。
大约 2 年之前 回复
duanchen1937
duanchen1937 我使用的是go标准库sql.Open,它用于处理连接池,所以我不能只是简单地重新连接。就像我提到的那样,在发生错误后,后续查询也可以正常运行。为了清楚起见,我将更新问题。
大约 2 年之前 回复
douba9776
douba9776 你在这里想要什么?如果连接已重置,则需要重新连接。
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐