正文

最近感觉博客访问奇慢,前几天还只是博客打开有点慢,以为是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监控,果不其然,也是心电图

磁盘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