说明此时有大概 1.5w 的异步请求待回头,请求量还是蛮大的,但还是没找到异常的用户代码,只能找下到底是谁发起了什么请求 。
0:080> !mdsoThread 80:Location Object Type------------------------------------------------------------...000000000d24e488 0000000358c57918 System.Net.HttpWebRequest000000000d24e2e8 00000001407b5b40 System.String "net_io_readfailure"...0:080> !mdt -r:2 0000000358c579180000000358c57918 (System.Net.HttpWebRequest) _Uri:0000000358c57210 (System.Uri) m_String:00000002407ee430 (System.String) Length=98, String="https://api.xxxx/peer_messages" ....可以看到请求的连接是 https://api.xxxx/peer_messages,是一个第三方的API接口,由于底层的连接关闭,导致了最后 net_io_readfailure 。
把所有的信息整合一下就是:
当请求量大了之后,访问 https://api.xxxx/peer_messages 会出问题,对方关闭了底层连接,导致客户端这边请求出现了大量 IO 回调异常:IOException: Unable to read data from the transport connection: The connection was closed.,2min之间多达合计 4w 的异常抛出,进而引发 CPU 爆高,将信息告诉了朋友,让朋友重点关注下 https://api.xxxx/peer_messages 这个连接 。
三: 总结这次生产事故主要是由于高峰期请求量过大,由于某种原因 Socket 连接关闭,导致了大量的异步回调异常 。
解决方法在调用端做好限流,据朋友说减少了不必要的 https://api.xxxx/peer_messages 调用,目前没有出现 CPU 爆高现象 。
经验总结扩展阅读
- 瓷娃娃做一次有效果吗?
- 生土豆片敷脸敷多长时间一次?
- 苏有朋版倚天屠龙记光明顶大战是第几集?
- 什么是饮水机机芯 饮水机机芯多久换一次
- 怎么开保险柜新买的保险柜打不开了,忘记怎么开了
- MassTransit | .NET 分布式应用框架
- 奥运会是四年一次吗
- 4 .NET 6学习笔记——如何在.NET 6的Desktop App中使用Windows Runtime API
- 学习ASP.NET Core Blazor编程系列八——数据校验
- GitHub Pages 和 Jekyll 笔记