在《.NET 5.0 背锅案》第7集-大结局之后,园子和 .NET 继续过上了幸福生活。。。剧情很美好,现实很残酷。。。现实是旧案刚结,新案立至,而且新案与旧案有关联,被迫继续拍剧,并对该剧重新进行命名,剧名叫《高并发下的.NET》,第1季的剧情是《.NET 5.0 背锅案》,第2季的剧情是《memcached连接暴增案》。
就在我们发布修复 StackExchange.Redis.Extensions 并发问题的更新后的第2天就出现了 memcached tcp 连接暴增的情况(通常连接数在3k以下,暴增时竟然超过15k),而这周一至周四每天都会出现。
下图是其中1台 memcached 服务器(一共有3台)的 tcp 连接数监控图(来自阿里云云监控)
阿里云云监控的报警邮件:
而昨天下午(11月26日)16:17 的访问高峰出现了一个相反情况,memcached 服务器 tcp 连接数突然暴跌
接着,16:45:07.025 开始出现 EnyimMemcachedCore 重置 socket 连接超时的错误日志
16:45:07.774 开始出现 EnyimMemcachedCore 重置 socket 连接失败的错误日志
16:45:56.582 开始出现 SqlClient 连接数据库超时的错误日志,遇到这个错误的请求会出现500错误
16:45:56.658 开始出现 StackExchange.Redis 的超时错误
16:45:57.305 开始出现 pod 重启的日志,说明开始有 pod 因为健康检查失败而被强制重启
pod 启动后接入负载时由于并发请求大,EnyimMemcachedCore 出现下面的错误日志
随后出现更多 SqlClient 连接数据库超时的错误日志。
16:52:00.028 EnyimMemcachedCore 开始出现告警日志
16:55 开始,从日志记录可以看出更多 pod 在重启
16:56:00.032 开始出现连接数据库服务器失败的错误
日志中继续出现大量连接数据库服务器失败或者超时的错误
17:03 开始,从日志看系统恢复了正常。
目前我们还没有找到问题的线索,正在进一步排查。
最后,附上阿里云RDS的数据库连接监控图