《高并发下的.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 ...
随机推荐
- xlrd加载Excal表格编码格式的问题
Python自动化测试中,利用xlrd加载文件名,代码如下: newpath = os.chdir('文件所在目录') filename = "文件名.xlsx" 报IOError ...
- [Luogu P3455] [POI2007]ZAP-Queries (莫比乌斯反演 )
题面 传送门:洛咕 Solution 这题比这题不懂简单到哪里去了 好吧,我们来颓柿子. 为了防止重名,以下所有柿子中的\(x\)既是题目中的\(d\) 为了方便讨论,以下柿子均假设\(b>=a ...
- 【Kata Daily 191012】Find numbers which are divisible by given number
题目: Complete the function which takes two arguments and returns all numbers which are divisible by t ...
- JAVA中使用JSONArray和JSONObject
json 就是一个键对应一个值,简单的一对一关系. JSONObject json对象,就是一个键对应一个值(键值对),使用的是大括号{ },如:{key:value} JSONArray jso ...
- CentOS6.x 安装 nginx-1.19.4
1.下载nginx http://nginx.org/en/download.html wget http://nginx.org/download/nginx-1.19.4.tar.gz 2.解压 ...
- layui系列学习第一天
新开一个博客系列 记录下layui学习过程及感受 今天受到很大的打击 ...希望 自己能坚持做好 到1.12号可以完成这个博客 一.基础说明 layui css 命名规范:1.layui-模块名- ...
- 在Windows进下build 高可用负载均衡与反向代理神器:HAProxy
前言 HAProxy是一个款基于Linux的开源高可用的负载均衡与反向代理工具,与Nginx大同小异. 搜遍了全网,几乎都是基于Linux平台.Windows平台的要么就是多年前的旧版本,要么就是不兼 ...
- hibernate3.6-联合主键注解以及openSession和getCurrentSession区别
[联合主键]>>>>配置方式:xml: 1. Student中单独创建StudentPk主键实体类 2. 配置: <composite-id name=" ...
- [MIT6.006] 15. Single-Source Shortest Paths Problem 单一来源的最短路径问题
首先简单介绍下最大路径问题:给定一个加权图,找到两点之间最短加权路径,本质上就是求两点之间哪条路径的权重和最小.有两种算法去做:Dijkatra和Bellman-Ford,后面几节课会专门讲这两个算法 ...
- 对udp dns的一次思考
目前昨天查一个线上问题:""dns服务器在我们的设备, 有大量的终端到设备上请求解析域名,但是一直是单线程,dns报文处理不过来", 然而设备是多核,dns服务器一直不能 ...