AWS Lambda上的.NET 6 API部署后间歇性连接RDS耗时15秒,寻求排查方向
AWS Lambda上的.NET 6 API部署后间歇性连接RDS耗时15秒,寻求排查方向
背景
我这边有个运行在AWS Lambda上的.NET 6 API,前端通过API Gateway接入,和同VPC内的MySQL Aurora RDS用EF Core做连接。
问题
昨天给Lambda部署了新版本,部署前所有接口的响应时间都稳定在300-400ms;结果部署后,接口开始出现间歇性的慢响应——大概每3次请求就有1次,耗时通常在15秒左右。查CloudWatch日志发现,这15秒的延迟全卡在打开RDS连接的环节。
我本来以为是代码或者部署的问题,已经回滚到之前的版本了,但问题还是存在,这说明应该是和AWS相关的外部因素导致的。
有没有朋友遇到过类似的情况?求一些进一步排查的思路。
.NET连接RDS的相关代码
//Lambda Entry point: Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction //Startup.cs->ConfigureServices: ConnectionStrings connectionStrings = paramStore.GetConnectionStrings(); services.AddDbContext<AppDbContext>(options => options.UseMySql(connectionStrings.DefaultConnection, new MySqlServerVersion(new Version(8, 0, 28))));
一些可以尝试的排查方向
- 先查RDS Aurora的连接池状态:去CloudWatch里看
DatabaseConnections、ConnectionPoolPendingConnections这些指标,确认是不是连接池耗尽了,或者有请求在排队等连接 - 检查Lambda的VPC配置:看看Lambda所在子网的可用IP够不够,会不会是IP耗尽导致新连接建不起来;另外确认一下子网的路由表、安全组规则有没有变更,确保Lambda到RDS的网络通路是通的
- 盯一下RDS的性能指标:比如
CPUUtilization(CPU使用率)、FreeableMemory(可用内存)、DiskQueueDepth(磁盘队列深度),看看是不是RDS本身负载太高,导致接连接变慢 - 检查EF Core的连接池配置:默认连接池大小是100,可以试试在连接字符串里显式设置
Max Pool Size=100;(根据实际情况调整数值),看看会不会缓解问题 - 看看AWS服务状态:去AWS控制台的Service Health Dashboard查一下,你所在区域的Lambda、RDS、VPC这些服务有没有异常或者正在维护的事件
- 开一下Lambda的X-Ray追踪:通过X-Ray看请求的完整链路,能更清楚连接RDS的延迟具体出在哪个环节,是不是网络层面有瓶颈
备注:内容来源于stack exchange,提问作者Gokul Panigrahi
相关产品推荐
相关产品推荐

