5

一段时间不活动后,我的 go web 服务在执行第一个 postgres sql 查询时收到一条net.OpError消息。read tcp x.x.x.x:52086->x.x.x.x:24414: read: connection reset by peer错误发生后,后续请求将正常工作。

postgres 数据库由 compose.com 托管,它在 postgres db 前面有 haproxy。我的 go web 应用程序使用标准 sql 和 sqlx。

我试过运行一个db.Ping()每 15 分钟调用一次的代码,但这并没有解决问题。

为什么 go 标准sql库不处理这些连接丢失?

4

1 回答 1

1

因为没有人写得那么清楚。这个问题的解决方法是设置db.SetConnMaxLifetime(time.Minute)。我试过了,它有效。连接重置经常发生在 AWS 上,其中不活动限制设置为 350 秒,然后返回 TCP RST。

于 2021-03-14T12:02:47.797 回答