半年前是每月本机 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 下。

.net 这玩意跨平台的稳定性还是差点,实际应用案例也不多,出了问题都找不到方案

图片看不清可以右键打开原图。

眼花放错日志了,日志里不是验证码接口,是微信公众号推送消息的接口,但错误原因是一样的,大量 System 开头的 dll 无法加载

#3 systemd 自动重启后才会出现这个问题,手动重启可恢复正常

#3 又说错了,日志里是微信公众号内网页登录的接口,排查了一整晚没研究出来不太清醒先去睡一会儿

数据库用的是云 MySQL 数据库,不在服务器上。

优先考虑文件有没有可能被杀掉,国内的 VPS 有时会做一些多余的事情,虽然名义上为了安全。

上面的不太懂,监控上磁盘 IO 持续爆表的情况遇到过,都是因为内存被占满了,可以看看是不是有什么进程在不断吃内存

可能跟系统有关系,我用腾讯云 centos 系统,装的梯子,以前也经常三天两头 io 爆表,发工单人家也查不到问题。后来换了 ubuntu ,没事了。

服务程序没有日志,OS 也没用系统日志吗? 你的 Redis 是否有高频写入操作? 你给出来的信息实在太少了。我们部署在 Ubuntu 20.04 上的系统 4 年了,没出过什么问题。

先试着将 runtime 和程序服务捆绑到一起发布,然后看看这个 dll 丢失是否还会存在。另外 StackExchange.Redis 高频写入会有问题,换库才能解决。

服务器上有开 swap 吗看到你用 redis 存大量数据,或许是内存爆了,然后向 swap 写数据,然后阿里云的普通硬盘的性能不足以支撑大量的随机读写

在 centos7/8 rocky8/9 ubuntu18/20/22 kylin10 上都长期运行.net3.1/6,没遇到过这种问题至少要知道是什么进程吃 io 吧,.net 这个报错看不出和磁盘之间有关应该有监控系统能定时监测 io,先找谁吃掉 io 的在说,讲证据而不是猜测打胡乱说

系统没有 swap 分区的可以考虑手动加一个。

可以看看 12 楼得方案,swap 还真有可能出问题,阿里云得磁盘高频写入独取数据磁盘占用会高

你可以挂一个 dotnet-trace 在后台跑着,等出问题了用 PerfView 看 trace 文件,说不定能抓到一些线索。

顺带一提,阿里云的服务器里内置的安全软件(无论 Linux 还是 Windows Server )有时候也是出现莫名其妙问题的原因之一

先丢 docker 里跑一阵子看看 docker 挂不挂

没有被杀掉,手动重启就能正常运行 内存占用率一直很低 没有高频写入,只有高频读取,读取量远大于写入 确实是没有 swap ,但是 avail Mem 一直在 10GB 以上

实在不行,采用 说的,跑在容器里面看看,限制下资源使用率。或者使用 说的,上追踪看看,服务器性能没问题,应该影响也不大。

磁盘先处于不可用状态,然后 kestrel 在某次创建 ssl connection 的过程中尝试加载 system.collections.nogeneric ,加载失败后抛出未处理异常。你再开一个机器,前面做负载均衡,理论上当这台机器爆炸的时候另一台应该正常;也就是说,我认为问题出在极其常见的阿里云超售失控。

也许是:redis 占用内存过大(没有释放),被阿里云盾给 kill 了。。。。我遇到过这种情况。如果不是本机 redis ,可能还受到带宽限制。。。建议看日志吧。。。

内存占用情况怎么样?发上来看一下。之前我们也有遇到过这样的问题,原因是手动实现了一个队列断线重连的逻辑,然后一直递归执行导致应用程序占用超大内存,以致 redis/mq 没有足够的内存,然后应用连接不上反复重连,导致服务器卡死,故障现象为:IO 占用超高,ssh 无法连接,无法对外访问,软重启无效。之前排查问题的时候也有考虑过用 dotnet-trace 或者 dump 之类的东西去查,但是根本支撑不到能 dump 到数据的时候。建议还是找一下重连、或者 redis 内存占用的问题

看你的异常信息,里是从 swagger 里调用了 weixinlogin 。。。 盲猜是 weixinlogin 调用出了问题, 可能是 http 请求过多没有释放。 你可以尝试 ulimit -n 看一下系统当前的最大文件描述符数是多少,然后排查以下 从 swagger 到 weixinlogin 这块逻辑有没有 http 连接 未释放或其他异常, 盲猜是这块逻辑有 bug ,导致大量 http 连接无法释放,导致文件描述符被大量占用或耗尽,才造成的 io 爆满,以及其他异常