半年前是每月本机 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 下。
1
aw2350 2023-12-04 10:51:19 +08:00
.net 这玩意跨平台的稳定性还是差点,实际应用案例也不多,出了问题都找不到方案
|
2
drymonfidelia OP 图片看不清可以右键打开原图。
|
3
drymonfidelia OP 眼花放错日志了,日志里不是验证码接口,是微信公众号推送消息的接口,但错误原因是一样的,大量 System 开头的 dll 无法加载
|
4
drymonfidelia OP @drymonfidelia #3 systemd 自动重启后才会出现这个问题,手动重启可恢复正常
|
5
drymonfidelia OP @drymonfidelia #3 又说错了,日志里是微信公众号内网页登录的接口,排查了一整晚没研究出来不太清醒先去睡一会儿
|
6
drymonfidelia OP 数据库用的是云 MySQL 数据库,不在服务器上。
|
7
thtznet 2023-12-04 11:08:55 +08:00
优先考虑文件有没有可能被杀掉,国内的 VPS 有时会做一些多余的事情,虽然名义上为了安全。
|
8
Shuu 2023-12-04 11:11:52 +08:00 via Android
上面的不太懂,监控上磁盘 IO 持续爆表的情况遇到过,都是因为内存被占满了,可以看看是不是有什么进程在不断吃内存
|
9
jgh004 2023-12-04 11:15:25 +08:00
可能跟系统有关系,我用腾讯云 centos 系统,装的梯子,以前也经常三天两头 io 爆表,发工单人家也查不到问题。后来换了 ubuntu ,没事了。
|
10
thinkershare 2023-12-04 11:16:26 +08:00
@drymonfidelia 服务程序没有日志,OS 也没用系统日志吗? 你的 Redis 是否有高频写入操作? 你给出来的信息实在太少了。我们部署在 Ubuntu 20.04 上的系统 4 年了,没出过什么问题。
|
11
thinkershare 2023-12-04 11:20:19 +08:00
先试着将 runtime 和程序服务捆绑到一起发布,然后看看这个 dll 丢失是否还会存在。另外 StackExchange.Redis 高频写入会有问题,换库才能解决。
|
12
leaflxh 2023-12-04 11:22:57 +08:00
服务器上有开 swap 吗
看到你用 redis 存大量数据,或许是内存爆了,然后向 swap 写数据,然后阿里云的普通硬盘的性能不足以支撑大量的随机读写 |
13
a33291 2023-12-04 11:25:58 +08:00
在 centos7/8 rocky8/9 ubuntu18/20/22 kylin10 上都长期运行.net3.1/6,没遇到过这种问题
至少要知道是什么进程吃 io 吧,.net 这个报错看不出和磁盘之间有关 应该有监控系统能定时监测 io,先找谁吃掉 io 的在说,讲证据而不是猜测打胡乱说 |
14
blackeeper 2023-12-04 11:26:54 +08:00
系统没有 swap 分区的可以考虑手动加一个。
|
15
skwyl 2023-12-04 11:27:23 +08:00
可以看看 12 楼得方案,swap 还真有可能出问题,阿里云得磁盘高频写入独取数据磁盘占用会高
|
16
hez2010 2023-12-04 13:23:00 +08:00
你可以挂一个 dotnet-trace 在后台跑着,等出问题了用 PerfView 看 trace 文件,说不定能抓到一些线索。
|
17
hez2010 2023-12-04 13:24:14 +08:00
顺带一提,阿里云的服务器里内置的安全软件(无论 Linux 还是 Windows Server )有时候也是出现莫名其妙问题的原因之一
|
18
StoneHuLu 2023-12-04 13:44:59 +08:00
先丢 docker 里跑一阵子看看 docker 挂不挂
|
19
drymonfidelia OP @thtznet 没有被杀掉,手动重启就能正常运行
@Shuu 内存占用率一直很低 @thinkershare 没有高频写入,只有高频读取,读取量远大于写入 @leaflxh 确实是没有 swap ,但是 avail Mem 一直在 10GB 以上 |
20
thinkershare 2023-12-04 14:33:49 +08:00
|
21
ragnaroks 2023-12-04 15:39:31 +08:00
磁盘先处于不可用状态,然后 kestrel 在某次创建 ssl connection 的过程中尝试加载 system.collections.nogeneric ,加载失败后抛出未处理异常。
你再开一个机器,前面做负载均衡,理论上当这台机器爆炸的时候另一台应该正常;也就是说,我认为问题出在极其常见的阿里云超售失控。 |
22
encro 2023-12-04 17:36:33 +08:00
也许是:
redis 占用内存过大(没有释放),被阿里云盾给 kill 了。。。。 我遇到过这种情况。 如果不是本机 redis ,可能还受到带宽限制。。。 建议看日志吧。。。 |
23
PerFectTime 2023-12-04 19:54:54 +08:00
内存占用情况怎么样?发上来看一下。
之前我们也有遇到过这样的问题,原因是手动实现了一个队列断线重连的逻辑,然后一直递归执行导致应用程序占用超大内存,以致 redis/mq 没有足够的内存,然后应用连接不上反复重连,导致服务器卡死,故障现象为:IO 占用超高,ssh 无法连接,无法对外访问,软重启无效。 之前排查问题的时候也有考虑过用 dotnet-trace 或者 dump 之类的东西去查,但是根本支撑不到能 dump 到数据的时候。 建议还是找一下重连、或者 redis 内存占用的问题 |
24
azraelrabbit 2023-12-05 09:30:26 +08:00 1
看你的异常信息,里是从 swagger 里调用了 weixinlogin 。。。 盲猜是 weixinlogin 调用出了问题, 可能是 http 请求过多没有释放。 你可以尝试 ulimit -n 看一下系统当前的最大文件描述符数是多少,然后排查以下 从 swagger 到 weixinlogin 这块逻辑有没有 http 连接 未释放或其他异常, 盲猜是这块逻辑有 bug ,导致大量 http 连接无法释放,导致文件描述符被大量占用或耗尽,才造成的 io 爆满,以及其他异常
|
25
drymonfidelia OP @azraelrabbit
# ulimit -n 65535 阿里云模板默认好像就是 65535 吧,应该没问题 swagger 到 weixinlogin 这块逻辑有没有 http 连接 未释放 释放 http 连接应该是 ASP.NET Core 框架管理的吧? |
26
blankqwq 2023-12-21 15:40:56 +08:00
会不会是中了 rdb 攻击
|