1214 字
6 分钟
Grok Bot 的云端电脑爆内存?记得划一片 swap

我现在手上大概有 19 个 Grok Bot,写博客的、跑资讯的、管美术的都有,它们共用同一台云端 Linux 电脑。平时相安无事,今天下午它终于撑不住了。

先交代一下这台机器:8 核 Xeon,16G 内存,126G 硬盘,没有 GPU。最开始一点 swap 都没有。

先是内存紧#

中午 13:16 让 bot 看了一眼,内存已经用掉 10G,可用 5.5G。占得最多的是两个浏览器自动化进程,一个 1.3G 到 1.8G 不等。

当时觉得有点悬,13 点 20 多分顺手加了 16G swap。后面会说到,这片 swap 在回滚时跟着一起丢了。

然后就卡死了#

16:29 左右,我让几个 bot 并行跑一条 AI 资讯的流水线:AI 资讯 bot 写文稿,Distro Bot 写社媒文案,写完交给美术总监去调度出图和做视频。

大概 16:59 到 17:03 之间,机器卡住了。连 free -h; uptime 这种命令都两分多钟不返回,试了两次,两次都是我手动打断的。

原因说起来也简单,就是 OOM。机器本来就只剩几个 G 的余量,中午那 16G swap 也没扛住,好几个 bot 同时出图、做视频,内存一下就见底了。内核忙着到处回收内存,整台机器就卡在那里,连一条 free -h 都跑不完。

终端里输入 free -h 后一直转圈不返回,RAM 条全红,旁边的机器人端着杯子冒汗等待

最后只能在设置里点了 Reset,回滚到上一次快照,17:05 左右重新开机。

回滚的代价#

损失不算大。工作目录里的文件基本都在,丢的主要是一些装在系统目录里的小工具,补装一下就好了。之前加的 swap 也跟着回滚没了,后面重新开的。

真正难受的是体验。Reset 会把所有 bot 手上的活一起打断,正在跑的任务直接没了,只能重新来一遍。十几个 bot 共用一台机器,一卡死就是全体停工,这比丢几个文件烦人多了。

在 overlay 上开 swap#

重新加 swap 的时候踩了个坑。这台机器的根目录是 overlay 文件系统,按常规做法建个文件直接 swapon,会报错:

swapon: /swapfile: swapon failed: Invalid argument

绕过去的办法是先把文件挂成 loop 设备,再对 loop 设备 swapon:

sudo fallocate -l 32G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
L=$(sudo losetup -f --show /swapfile)
sudo swapon $L

过程有点绕。回滚后先重开了 16G,后来我想要 32G,就又加了一个 16G 的 /swapfile2。两块看着别扭,19:46 干脆合成一块:两块都 swapoff,losetup -d 卸掉 loop 设备,删文件,再按上面的命令建一个 32G 的。

现在 cat /proc/swaps 是这样:

/dev/loop0 partition 33554428 0 -2

swappiness 没动,保持 10。

这里有个坑还没填:loop 设备没法直接写进 fstab,所以机器一重启,swap 就得重新挂。目前是手动的,回头得写个开机脚本。

顺便测了一下#

swap 是放在硬盘上的,所以顺手用 dd(direct IO)测了下盘:顺序写 663MB/s,顺序读 1.8GB/s,4K 写 146MB/s。比我预想的好一些。

然后用 python 硬塞了 5G 内存进去。free -m 显示内存用了 15581/16013,可用只剩 431,swap 用了 2878MB。程序正常跑完,机器没卡。跑完之后 swap 里还留了 2.4G 左右没回来。

写这篇的时候(19:52)free -h 是:内存 15Gi,用了 10Gi,可用 4.9Gi;swap 31Gi,用了 2.1Gi。

不过 swap 说到底只是个缓冲垫,不是多出来的内存。真用到它的时候肯定比内存慢,它的作用是让机器慢下来而不是直接卡死。

内存到底去哪了#

19:45 看的时候用了 12G,其中 cgroup 里的匿名内存约 6.2G,文件缓存约 3G,后者是可以回收的。

大头其实是每个 bot 的固定开销。19 个 bot,每个有一个后台服务,约 150MB,加起来 3G 左右;每个 bot 还有一套自己的虚拟桌面(Xvfb、xfwm4、plank、x11vnc 这些),按 RSS 加起来约 4G,不过这个数有重复计算,实际会少一点。

也就是说,bot 们什么都不干,就已经占掉不少了。再让几个同时出图做视频,不出事才怪。

还没做的事#

目前唯一的「预防措施」是我口头跟各个 bot 打了招呼,别同时开太多吃内存的任务。说白了就是靠自觉。

真正该做的几件事都还没做:限制同时跑的重任务数量,给 bot 设 cgroup 内存上限,再写个开机自动重挂 swap 的脚本。等哪天又卡一次,估计就会去做了。

如果你也在一台小机器上养了一堆 bot,建议先把 swap 划上。不贵,关键时候能救命。

Grok Bot 的云端电脑爆内存?记得划一片 swap
https://blog.acgsteps.com/posts/grokbot-swap/
作者
GYlove1994
发布于
2026-10-09
许可协议
CC BY-NC-SA 4.0