《高并发下的.NET》第2季 - 《memcached连接暴增案》第1集:问题表现
在《.NET 5.0 背锅案》第7集-大结局之后,园子和 .NET 继续过上了幸福生活。。。剧情很美好,现实很残酷。。。现实是旧案刚结,新案立至,而且新案与旧案有关联,被迫继续拍剧,并对该剧重新进行命名,剧名叫《高并发下的.NET》,第1季的剧情是《.NET 5.0 背锅案》,第2季的剧情是《memcached连接暴增案》。
就在我们发布修复 StackExchange.Redis.Extensions 并发问题的更新后的第2天就出现了 memcached tcp 连接暴增的情况(通常连接数在3k以下,暴增时竟然超过15k),而这周一至周四每天都会出现。
下图是其中1台 memcached 服务器(一共有3台)的 tcp 连接数监控图(来自阿里云云监控)

阿里云云监控的报警邮件:
华东1(杭州) 云服务器ECS实例:memcached1,云服务器实例ID=i-bp1f2iqt161cleifjsfl,状态=ESTABLISHED,instanceName=memcached1 ,Host.tcpconnection于18:41发生告警,平均值为15265.55Count,持续时间0分钟。
而昨天下午(11月26日)16:17 的访问高峰出现了一个相反情况,memcached 服务器 tcp 连接数突然暴跌

接着,16:45:07.025 开始出现 EnyimMemcachedCore 重置 socket 连接超时的错误日志
Enyim.Caching.MemcachedClient
2020-11-26 16:45:07.025 [Error] Timeout to reset an acquired socket.
16:45:07.774 开始出现 EnyimMemcachedCore 重置 socket 连接失败的错误日志
Enyim.Caching.Configuration.MemcachedClientConfiguration
2020-11-26 16:45:07.774 [Error] Failed to reset an acquired socket.
16:45:56.582 开始出现 SqlClient 连接数据库超时的错误日志,遇到这个错误的请求会出现500错误
Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
---> System.ComponentModel.Win32Exception (258): Unknown error 258
16:45:56.658 开始出现 StackExchange.Redis 的超时错误
StackExchange.Redis.RedisTimeoutException: Timeout awaiting response (outbound=0KiB, inbound=0KiB, 1444ms elapsed, timeout is 1000ms), command=MGET, next: GET blog_v2_BlogPosts-389476, inst: 0, qu: 0, qs: 3, aw: False, rs: ReadAsync, ws: Idle, in: 14559, in-pipe: 0, out-pipe: 0, serverEndpoint: redis-blog:6379, mc: 1/1/0, mgr: 8 of 10 available, clientName: blog-web-5cf67c9795-6wmvz, IOCP: (Busy=0,Free=1000,Min=20,Max=1000), WORKER: (Busy=50,Free=32717,Min=50,Max=32767), v: 2.1.58.34321 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
at StackExchange.Redis.Extensions.Core.Implementations.RedisDatabase.GetAllAsyncT
16:45:57.305 开始出现 pod 重启的日志,说明开始有 pod 因为健康检查失败而被强制重启
2020-11-26 16:45:57.305 [Error] Request Execution Time: 7740 ms
ThreadPool.ThreadCount: 50, Pending work item count: 216, Completed work item count: 226710523
pod 启动后接入负载时由于并发请求大,EnyimMemcachedCore 出现下面的错误日志
[Error] Pool is full, timeouting. 10.0.78.156:11211
随后出现更多 SqlClient 连接数据库超时的错误日志。
Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding
16:52:00.028 EnyimMemcachedCore 开始出现告警日志
[Warning] Socket bound to "10.0.78.156:11211" has 44 unread data! This is probably a bug in the code. InstanceID was a247c5cd-575f-4f04-8573-fb03f199cb9c.
16:55 开始,从日志记录可以看出更多 pod 在重启
16:56:00.032 开始出现连接数据库服务器失败的错误
An error occurred using the connection to database '"xxx"' on server '"yyyy.sqlserver.rds.aliyuncs.com,3433"'.
Microsoft.EntityFrameworkCore.Database.Connection
日志中继续出现大量连接数据库服务器失败或者超时的错误
17:03 开始,从日志看系统恢复了正常。
目前我们还没有找到问题的线索,正在进一步排查。
最后,附上阿里云RDS的数据库连接监控图

《高并发下的.NET》第2季 - 《memcached连接暴增案》第1集:问题表现的更多相关文章
- 《高并发下的.NET》第2季 - 故障公告:高并发下全线崩溃
大家好,非常抱歉,在昨天下午(12月3日)的访问高峰,园子迎来更高的并发,在这样的高并发下,突发的数据库连接故障造成博客站点全线崩溃,由此给您带来很大的麻烦,请您谅解. 最近,我们一边在忙于AWS合作 ...
- php结合redis实现高并发下的抢购、秒杀功能
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...
- 高并发下MySQL出现checking permissions
在某些数据访问层框架中,会使用show full tables from test like 'demo',来检查数据库的状态.当数据库中表的数量较少时,并没有出现严重的问题.但是当数据库中的表数量多 ...
- EF+MySQL乐观锁控制电商并发下单扣减库存,在高并发下的问题
下订单减库存的方式 现在,连农村的大姐都会用手机上淘宝购物了,相信电商对大家已经非常熟悉了,如果熟悉电商开发的同学,就知道在买家下单购买商品的时候,是需要扣减库存的,当然有2种扣减库存的方式, 一种是 ...
- (高级篇)php结合redis实现高并发下的抢购、秒杀功能
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...
- php结合redis实现高并发下的抢购、秒杀功能 (转载)
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到 ...
- php 高并发下 秒杀处理思路
1.用额外的单进程处理一个队列,下单请求放到队列里,一个个处理,就不会有并发的问题了,但是要额外的后台进程以及延迟问题,不予考虑. 2.数据库乐观锁,大致的意思是先查询库存,然后立马将库存+1,然后订 ...
- PHP开发中多种方案实现高并发下的抢购、秒杀功能
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到 ...
- Random在高并发下的缺陷以及JUC对其的优化
Random可以说是每个开发都知道,而且都用的很6的类,如果你说,你没有用过Random,也不知道Random是什么鬼,那么你也不会来到这个技术类型的社区,也看不到我的博客了.但并不是每个人都知道Ra ...
随机推荐
- zk配置文件详解
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:CS通信心跳数 Zoo ...
- 在CentOS 8 上 部署 .Net Core 应用程序
在Centos 8 上 部署 .Net Core 应用程序 -- 记录篇 1.更新dnf 源 1 dnf update 2.安装 Asp.Net Core 运行时 1 dnf install ...
- A*算法的有关知识--例子:最短路径问题
前置知识 定义1,g(n)=从树根到节点n的代价.当算法处理到某个节点时,g(n)是可以精确计算的. 定义2,h*(n)=从节点n到目标节点的优化路径的代价.一般不可知. 定义3,f*(n)=g(n) ...
- JVM的艺术—类加载器篇(二)
分享是价值的传递,喜欢就点个赞 引言 今天我们继续来深入的剖析类加载器的内容.上节课我们讲了类加载器的基本内容,没看过的小伙伴请加关注.今天我们继续. 什么是定义类加载器和初始化类加载器? 定义类加载 ...
- Go语言的互斥锁Mutex
目录 一.使用方法 二.死锁场景 1.Lock/Unlock不是成对出现 2.锁被拷贝使用 3.循环等待 一.使用方法 Mutext是互斥锁的意思,也叫排他锁,同一时刻一段代码只能被一个线程运行,两个 ...
- mysql 两主一从环境搭建(5.7.24)
搭建说明 两主一从,从本质上说,只不过是机器 master-a 和 master-b 互为主从机(热备),然后通过 keepalived 进行高可用配置,使得在同一时间内只会有一台对外提供服务,实现单 ...
- Java_数组, 懒得整理了 ---------------------> 未完, 待续
待续 public class TestArray { public static void main(String[] args) { String[] s1 = {"双儿", ...
- python3爬虫应用--爬取网易云音乐(两种办法)
一.需求 好久没有碰爬虫了,竟不知道从何入手.偶然看到一篇知乎的评论(https://www.zhihu.com/question/20799742/answer/99491808),一时兴起就也照葫 ...
- 鸿蒙之后,小米 Vela 也来了,下一代物联网平台应该是什么?
1. 华为鸿蒙基于jerryscript构建物联网应用框架 2020年9月10日 鸿蒙OS 1.0 正式版发布,面向物联网领域,鸿蒙推出了类web开发架构ACE JS = LiteOS + jerry ...
- [MIT6.006] 3. Insertation Sort, Mege Sort 插入排序,归并排序
关于第2节课<Models of Computation, Document Distance>由于内容过于简单,所以不在这里进行记录,它主要就是讲了Python很多操作是constant ...