在一段时间不活动之后,我的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。
我尝试每隔15分钟运行一次代码db.Ping()
,但这并没有解决问题。
为什么go标准sql
lib没有处理这些连接丢失?
答案 0 :(得分:0)
因为没有人明确地写过。此问题的解决方案是设置 db.SetConnMaxLifetime(time.Minute)
。我试过了,它有效。连接重置经常发生在 AWS 上,在返回 TCP RST 之后,将不活动限制设置为 350 秒。