《.NET 5.0 背锅案》第3集-剧情反转:EnyimMemcachedCore 无罪,.NET 5.0 继续背锅
今天晚上基于第2集中改进版的 EnyimMemcachedCore 进行了发布,发布过程中故障重现,最大的嫌犯 EnyimMemcachedCore 被证明无罪,暂时委屈 .NET 5.0 继续背锅。
发布操作启动后,Kubernetes 集群在 20:05 左右开始更新 pod

在 20:09 之前一切正常,20:09 开始日志开始出现 tcp 连接相关的异常。
最先报异常的是 redis 客户端 StackExchange.Redis
StackExchange.Redis.RedisTimeoutException: Timeout awaiting response (outbound=0KiB, inbound=0KiB, 1120ms elapsed, timeout is 1000ms), command=SET, next: SET blog_v2_blogpost-stats-192308-8057845
接着是 EnyimMemcachedCore
2020-11-16 20:09:03.901 [Error] Pool is full, timeouting. 10.0.78.156:11211
Enyim.Caching.Configuration.MemcachedClientConfiguration
日志中一堆上面的2个错误交替出现,大概是这个时候故障开始出现,访问速度开始变慢。
接着 20:12~20:17 期间出现非常神奇的事情,日志中只有不到10条的记录,这根本不可能,而且这时处于故障期间,大量请求响应缓慢,只有一个原因可以解释——整个系统 hang 住了,似乎在这段时间所有线程都卡住了,.NET 5.0 的世界似乎时间停止了。
20:18 开始日志记录又开始大量出现,这时正好所有 pod 更新完毕

虽然 pod 更新完成了,但从日志中看还是有 pod 在重启,可能是因为健康检查失败而重启。
20:19 开始情况变得更糟
Redis客户端连接超时的情况继续
StackExchange.Redis.RedisTimeoutException: Timeout awaiting response"
EnyimMemcachedCore 无法从 socket pool 拿到连接的情况继续
Pool is full, timeouting
EnyimMemcachedCore 出现新的异常情况
2020-11-16 20:19:29.373 [Warning] Socket bound to "10.0.78.156:11211" has 20 unread data! This is probably a bug in the code. InstanceID was 59b0c942-47d4-4977-bd27-668ed4972459.
HttpClient 也开始出现连接超时
System.Threading.Tasks.TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 3 seconds elapsing.
EnyimMemcachedCore 各种错误
[Error] Timeout to reset an acquired socket.
[Error] Acquire failed. Maybe we're already disposed?
...
20:20 开始出现大量数据库连接超时的情况,故障全面爆发。
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached
似乎从时间停止状态恢复的 .NET 5.0 世界一切错乱了,赶紧回退。
这时开始向 .NET Core 3.1 版回退,在 20:25 左后回退全部完成后,一切恢复了正常。
这次完整地经历了整个故障发生的过程,真是惊心动魄,经历之后让人茫然不知所措,不管怎么样,这个锅不能让 EnyimMemcachedCore 背,我们博客系统的代码也背不起(就是我们想写也写不出能让 .NET 5.0 runtime 世界天翻地覆的代码),还是先委屈 .NET 5.0 继续背锅吧,虽然这会招来一片骂声,但我们实在找不出可以委以重任的替代者。
《.NET 5.0 背锅案》第3集-剧情反转:EnyimMemcachedCore 无罪,.NET 5.0 继续背锅的更多相关文章
- 《.NET 5.0 背锅案》第7集-大结局:捉拿真凶 StackExchange.Redis.Extensions 归案
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- 《.NET 5.0 背锅案》第4集:一个.NET,两手准备,一个issue,加倍关注
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- 《.NET 5.0 背锅案》第5集-案情大转弯:都是我们的错,让 .NET 5.0 背锅
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- 《.NET 5.0 背锅案》第6集-案发现场回顾:故障情况下 Kubernetes 的部署表现
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- 《.NET 5.0 背锅案》第1集:验证 .NET 5.0 正式版 docker 镜像问题
今天我们分析了博客站点的2次故障(故障一.故障二),发现一个巧合的地方,.NET 5.0 正式版的 docker 镜像是在11月10日提前发布上线的. 而在11月10日下午4点左右,由于 CI 服务器 ...
- 坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)
上一篇:<坎坷路:ASP.NET 5 Identity 身份验证(上集)> ASP.NET Core 1.0 什么鬼?它是 ASP.NET vNext,也是 ASP.NET 5,以后也可能 ...
- redis 4.0.8 源码包安装集群
系统:centos 6.9软件版本:redis-4.0.8,rubygems-2.7.7,gcc version 4.4.7 20120313,openssl-1.1.0h,zlib-1.2.11 y ...
- SELECT INTO和INSERT INTO SELECT的区别 类似aaa?a=1&b=2&c=3&d=4,如何将问号以后的数据变为键值对 C# 获取一定区间的随即数 0、1两个值除随机数以外的取值方法(0、1两个值被取值的概率相等) C# MD5 加密,解密 C#中DataTable删除多条数据
SELECT INTO和INSERT INTO SELECT的区别 数据库中的数据复制备份 SELECT INTO: 形式: SELECT value1,value2,value3 INTO Ta ...
- 生产环境elasticsearch5.0.1和6.3.2集群的部署配置详解
线上环境elasticsearch5.0.1集群的配置部署 es集群的规划: 硬件: 7台8核.64G内存.2T ssd硬盘加1台8核16G的阿里云服务器 其中一台作为kibana+kafka连接查询 ...
随机推荐
- vue 项目打包后静态资源加载不到
1, 2,
- CSS的背景
CSS的背景 1. 背景颜色background-color div { background-color: 颜色值; } 一般情况下元素背景颜色默认是transparent(透明). 2. 背景图片 ...
- CSS字体属性与文本属性
CSS字体属性与文本属性 1. 字体属性 1.1 字体系列font-family p { font-family: "Microsoft Yahei";/*微软雅黑*/ } /*当 ...
- Unix中使用MeteoInfo - Xmanager设置
通过Xshell等客户端登陆Unix系统运行图形软件(X11)需要有X-server,Xmanager是其中的佼佼者(可惜是商业软件).我通常用Xshell登陆气象局的IBM高性能计算机(AIX系统) ...
- UDP协议网络Socket编程(java实现C/S通信案例)
我的博客园:https://www.cnblogs.com/chenzhenhong/p/13825286.html 我的CSDN博客:https://blog.csdn.net/Charzous/a ...
- SpringBoot整合Elasticsearch游标查询(scroll)
游标查询(scroll)简介 scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而又不用付出深度分页那种代价. 游标查询会取某个时间点的快照数据. 查询初始化之后 ...
- BASH提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令
BASH的PS1变量控制提示符相关的东西,善用它可以让BASH用起来舒服很多 提示符颜色 提示符显示上一个命令的返回值(exit code),并根据是否0调整颜色 提示符生成的时间(这样就知道上一条命 ...
- spring boot: 设计接口站api的版本号,支持次版本号(spring boot 2.3.2)
一,为什么接口站的api要使用版本号? 1,当服务端接口的功能发生改进后, 客户端如果不更新版本, 则服务端返回的功能可能不能使用, 所以在服务端功能升级后, 客户端也要相应的使用 ...
- MySQL 主从复制原理不再难
上篇我们分析过 Binlog 日志的作用以及存储原理,感兴趣的可以翻阅: 一文带你了解 Binlog 日志 Binlog 日志主要作用是数据恢复和主从复制.本身就是二进制格式的日志文件,网络传输无需进 ...
- Asp.Net Core 查漏补缺《一》 —— IStartFilter
Asp.Net Core 查漏补缺<一> -- IStartFilter IStartFilter 实现了Configure,如下图一,而Configure方法接受并返回Action< ...