服务器负载异常排查
正文
最近感觉博客访问奇慢,前几天还只是博客打开有点慢,以为是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 .