You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Run偶发Postgres与Redis连接故障求助

问题:Cloud Run迁移后Postgres与Redis频繁连接重置报错

近期将Java服务器从Heroku迁移至Google Cloud Run后,每日多次出现请求失败,具体报错如下:

Postgres查询报错

Caused by: org.postgresql.util.PSQLException An I/O error occurred while sending to the backend.
...
Caused by: java.net.SocketException: Connection reset by peer

Redis请求报错

redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Connection reset

Postgres与Redis均由Aiven托管,运行于Google Cloud且与Web服务器同区域。当前使用Hikari作为Postgres连接池,Jedis连接Redis。已尝试将Hikari连接最大生命周期设置为30秒(针对Cloud Run可能终止长连接的推测),但问题仍未解决。Google官方文档提及该问题,但未给出明确解决方案。


解决方案建议

Postgres(Hikari连接池)优化

  • 启用连接前置验证:配置connectionTestQuery: SELECT 1,同时设置validationTimeout为3-5秒,确保连接池在分配连接前验证其有效性,避免使用已被重置的无效连接。
  • 调整连接生命周期参数:将idleTimeout设为15秒(短于Cloud Run默认的网络空闲超时),maxLifetime设为280秒(略低于Aiven Postgres默认的5分钟连接超时),平衡连接复用率与有效性。
  • 添加异常重试逻辑:在JDBC调用层捕获PSQLException(含Connection reset错误),针对幂等查询实现最多3次的自动重试。

Redis(Jedis)优化

  • 规范连接池使用:确保基于JedisPool管理连接,配置testOnBorrow: true,每次获取连接时执行PING命令验证可用性;同时合理设置maxTotal、maxIdle参数,避免连接过载。
  • 缩短超时配置:将connectTimeout和soTimeout设为5秒,快速识别无效连接并释放资源。
  • 实现连接异常重试:捕获JedisConnectionException,对幂等操作进行重试,同时在重试前尝试重新获取连接。

Cloud Run环境配置调整

  • 检查VPC连接器:若通过VPC连接器访问Aiven服务,确认连接器的空闲超时设置(建议不低于15秒),避免因连接器提前断开导致后端连接重置。
  • 监控连接指标:利用Cloud Monitoring跟踪连接池的活跃连接数、连接创建/销毁频率,结合Aiven的数据库/Redis监控数据,定位是否存在连接泄漏或异常终止规律。

内容的提问来源于stack exchange,提问作者mroloux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:35:16