求助(附日志)ASP.NET Core 部署在 Ubuntu 22.04 8 核 32G 阿里云下每月固定出现一次服务器失联情况,具体时间随机,失联后系统盘 IO 爆表,重启可解决,应该从哪里开始排查?完全没思路,附日志

359 天前
 drymonfidelia

半年前是每月本机 Redis 连接超时( StackExchange.Redis.RedisTimeoutException: Timeout awaiting response (outbound=0KiB, inbound=0KiB, 6???ms elapsed, timeout is 5000ms),程序大量使用了 Redis 缓存数据,日志里每隔几天就会出现这个错误,因为错误会自动重试,实际并没有影响到业务,因此一直没人管,不知道和每月固定服务挂掉一次是否有关),重启后就出现登录验证码 500 错误的问题,看日志找不到 dll ,见图: 我用 python 写了一个每 5 秒请求一次验证码接口,连续 2 次 500 错误则重启服务,稳定 3 个月后故障升级为每月服务器失联,失联期间日志没记录到任何错误,但客户从阿里云小程序看系统盘 IO 爆表: SSH 也连接不上。同一套系统以前部署在 Windows Server 下非常稳定,但因为一些非技术原因现在必须部署在 Linux 下。

2679 次点击
所在节点    .NET
26 条回复
ragnaroks
359 天前
磁盘先处于不可用状态,然后 kestrel 在某次创建 ssl connection 的过程中尝试加载 system.collections.nogeneric ,加载失败后抛出未处理异常。

你再开一个机器,前面做负载均衡,理论上当这台机器爆炸的时候另一台应该正常;也就是说,我认为问题出在极其常见的阿里云超售失控。
encro
359 天前
也许是:

redis 占用内存过大(没有释放),被阿里云盾给 kill 了。。。。
我遇到过这种情况。

如果不是本机 redis ,可能还受到带宽限制。。。

建议看日志吧。。。
PerFectTime
359 天前
内存占用情况怎么样?发上来看一下。

之前我们也有遇到过这样的问题,原因是手动实现了一个队列断线重连的逻辑,然后一直递归执行导致应用程序占用超大内存,以致 redis/mq 没有足够的内存,然后应用连接不上反复重连,导致服务器卡死,故障现象为:IO 占用超高,ssh 无法连接,无法对外访问,软重启无效。

之前排查问题的时候也有考虑过用 dotnet-trace 或者 dump 之类的东西去查,但是根本支撑不到能 dump 到数据的时候。
建议还是找一下重连、或者 redis 内存占用的问题
azraelrabbit
358 天前
看你的异常信息,里是从 swagger 里调用了 weixinlogin 。。。 盲猜是 weixinlogin 调用出了问题, 可能是 http 请求过多没有释放。 你可以尝试 ulimit -n 看一下系统当前的最大文件描述符数是多少,然后排查以下 从 swagger 到 weixinlogin 这块逻辑有没有 http 连接 未释放或其他异常, 盲猜是这块逻辑有 bug ,导致大量 http 连接无法释放,导致文件描述符被大量占用或耗尽,才造成的 io 爆满,以及其他异常
drymonfidelia
358 天前
@azraelrabbit

# ulimit -n
65535

阿里云模板默认好像就是 65535 吧,应该没问题
swagger 到 weixinlogin 这块逻辑有没有 http 连接 未释放 释放 http 连接应该是 ASP.NET Core 框架管理的吧?
blankqwq
342 天前
会不会是中了 rdb 攻击

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/997407

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX