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

AWS EC2上Dotnet服务器与PostgreSQL RDS连接池1小时超时问题排查

排查EC2上.NET连接PostgreSQL RDS闲置1小时超时的原因
  • AWS网络中间组件的超时限制:如果EC2通过NAT网关访问RDS,NAT网关默认TCP空闲超时为1小时,这个设置会主动断开闲置连接——哪怕EC2和RDS自身配置了更长的超时。连接池中的连接会被标记为可用,但实际已被NAT网关断开,后续请求使用该连接时就会触发超时。这是此类问题最常见的诱因,容易被忽略。

  • PostgreSQL驱动的连接存活检测不足:.NET使用的Npgsql驱动默认不会自动检测连接是否被外部设备断开。当连接被中间网络组件断开后,连接池仍认为该连接有效,获取连接时就会报错。可以在连接字符串中添加Validate Connection=true,让驱动每次从连接池取连接时验证有效性;或者设置KeepAlive=30这类参数,定期发送心跳包保持连接活跃。

  • EC2实例的系统TCP参数限制:EC2操作系统的TCP keepalive参数可能导致闲置连接被断开。以Linux为例,若tcp_keepalive_time被修改为3600秒(1小时),系统会主动断开闲置1小时的连接。可以通过sysctl net.ipv4.tcp_keepalive_time命令查看当前配置,必要时调整为更长时间(比如86400秒)。

  • 连接池配置未优化:虽然设置了maxPoolSize=100,但如果Min Pool Size设为0,所有连接都会在闲置后进入空闲状态,更容易被外部设备断开。设置Min Pool Size为一个较小的值(比如5),保持少量连接持续活跃,避免因长时间闲置被断开。

  • RDS参数组配置未生效:确认RDS的空闲会话超时(idle_in_transaction_session_timeout)、TCP空闲相关参数(如tcp_keepalives_idle)所在的参数组已应用到实例,且实例已重启(部分静态参数需要重启才能生效)。如果参数组未正确应用,之前的配置不会起作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:16:09