使用pg Pool与RDS Proxy的AWS Lambda遇连接意外终止问题排查
问题解答
1. 错误是否因Lambda未归还连接至连接池导致?
是。Lambda中未调用release()归还连接会引发两个关键问题:
- 连接池资源耗尽:pg Pool的连接数是有限的,未释放的连接会一直占用池内名额,后续请求无法获取新连接,甚至触发连接超时或强制回收,导致「Connection terminated unexpectedly」。
- 失效连接残留:Lambda容器可能被复用,未释放的连接会留在池中,这些连接可能因RDS Proxy超时、数据库端断开等原因已经失效,下次复用容器时使用该连接就会触发错误。
2. 错误是否由RDS Proxy超时/断开连接引发?
是,且是两者共同触发的核心原因之一:
- 你的RDS Proxy配置了10分钟超时,闲置连接会被Proxy主动断开。对于NestJS来说,即使正确释放了连接,若连接回到Proxy池后闲置超过10分钟,下次获取该连接时,它已经被Proxy断开,应用层使用时就会出现连接终止错误。
- 对于Lambda,未释放的连接会一直占用Proxy的连接资源,直到Proxy超时断开,此时Lambda持有的连接对象已经失效,后续操作该连接就会触发错误。
3. Lambda和NestJS的问题是否会互相影响?
会,两者共享RDS Proxy的连接池资源,存在直接的相互影响:
- 连接资源抢占:Lambda未释放的连接会持续占用Proxy连接池的名额,导致NestJS可获取的连接数减少,甚至出现连接池耗尽的情况,间接引发NestJS的连接错误。
- Proxy超时的连锁反应:Proxy的超时断开是全局的,Lambda的连接泄漏会增加闲置连接的数量,Proxy需要频繁断开这些无效连接,导致NestJS获取到已断开连接的概率升高,加剧错误出现的频率。
内容的提问来源于stack exchange,提问作者krishnadev
相关产品推荐
相关产品推荐

