服务器负载异常排查
# 正文
最近感觉博客访问奇慢,前几天还只是博客打开有点慢,以为是 CDN 的问题便没怎么管,结果今天发现评论系统也间歇性加载不出来了,发现事情并不简单。
# 排查
先登录了 1panel 面板,发现资源使用率高达 170%,CPU 也有 70%(一般来说只会在 20% 左右)
马上切换到进程管理,发现 openresty 占用 80% 的 CPU,第一反应是被打了
先暂时重启 OpenResty,然后在查看网站日志,但看下来日志大小都都挺正常
然后就翻到了我们的老伙计 Gitea,每一天的 access.log 高达 10M+
第一反应就是又被哪个傻逼 AI 爬虫给到处爬(之前就有先例,直接把服务器爬死机),但我明明记得已经在 CF 开了拦截所有 AI 爬虫,并且把海外 IP 全 ban 了。
翻了下日志,发现请求内容全是 Runner 的请求,没有看到 AI 爬虫的
暂时有点摸不清问题所在
在监控面板看了下服务器最近的资源占用率情况
结果不看不知道,一看吓一跳
平常没怎么看监控面板,而且这玩意图太有迷惑性了,不仔细看还以为是普通的请求造成的,把时间区间拉小一看,还以为是看心电图呢。。。
最难蚌的是最低资源使用率基本都是 80%+
打算往前面翻翻,结果发现从有日志的时间开始(监控日志保存 30 天)就一直是这样了。。。
好吧属实是疏忽了,平常看这玩意运行挺稳的就没怎么管,push 博客也是全自动 Hook,没怎么登录服务器(doge
本来还想打算继续看看,突然反应又慢了起来
这次进程管理都进不去了,只好登 ssh,开 htop 看看是哪个玩意在作妖
htop 一看,redis。。。
再看了看那 170% 的 IO,懂了
把 redis 暂时关掉,看了下磁盘 IO 监控,果不其然,也是心电图
这里大概已经知道是怎么回事了,不过还有一个点想不通,然后想到了 Gitea 的 Runner
看了一下日志,每两分钟 Runner 会请求一次 Gitea,虽然不知道为什么这会造成 Gitea 发癫,但结果应该大差不差了
# 结论
Runner 每两分钟请求一次 Gitea
Gitea 发癫
Redis 被 Gitea 冲爆
Redis 把内存占满
Debian 疯狂向 swap 写
swap 疯狂读写磁盘
众所周知,阿里云的轻量磁盘 IO 垃圾的一匹
因此导致 IO 延迟爆炸
外加 MySQL 助攻
最终导致资源使用率最高到达 1280%,平均 300%
# 后记
暂时把 redis 和 gitea 关掉后服务器已经正常,因此问题就是出在 Gitea 上
1panel 装的 redis 貌似默认有持久化,重启还没用,重启完载入数据库 IO 更加爆炸,只能手动 flush,打个 FLUSHALL 命令花了 21s 才清空完数据库,不知道 Gitea 给 redis 塞了些什么玩意。。。
这个 Runner 还是我部署在华为云上的一个白嫖小鸡,当时感觉没啥可以部署的就部署了这玩意玩玩,结果给我整这一出
整个事件下来最让我绷不住的,是这个状态持续了好几个月,直到今天才明显感知出来,平常无论是 Frp 映射,还是发布博客,都没有任何感觉🤣,也是辛苦这台机了,2h2g,挂了一堆容器,还要塞个 Gitea 和 MySQL
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .