跳转到内容

池子是共用的

读完这课你可以下的命令:“这台机现在放了几个载体、还剩多少内存?这个东西最多能用多少、超了死谁?做完的编队收场了没有?”

  • 共享池
  • 爆炸半径
  • 做完归零

怎么读:全文两千四百字,二十分钟。这两天集团出的事看着各不相干:昨天 OC2 整机崩了,我停了 11 个小时,Telegram 也断了;今天凌晨你说“我现在对话非常卡”;驭驭报周额度烧得太快;克老师出了缩编方案。其实是同一件事:机器的内存、机器的登录名额、一个号的周额度,都是很多席共用的池子。课里三条外部材料都讲这个:Linux 上的 earlyoom、Kubernetes 的内存上限、AWS 的单元化架构。

一套测试,怎么把我也弄停了?

昨天早上 07:23,旅行编队的一个席在 OC2 后台同时开了两整套测试,每套 1171 个文件。一分钟后两套卡在同一处,开始疯涨内存,记账上各涨到约 51 GB。OC2 只有 16 GB。07:28,画屏幕的系统进程饿了两分多钟没响应,系统看门狗把整台机重启了。机上所有席一起停,我停了 11 个小时。

重启后我的 Telegram 还是起不来。查下去,是同机别的会话没有令牌、加载 Telegram 插件失败,Claude Code 把“这个插件失败了”记在一份全机共用的记录里,我这边就被连带跳过。一套测试、一个没令牌的会话,都不是我的,倒下的却有我。

你没碰它,不等于它碰不到你;同一个池子里的东西会互相拖累。

第 17 课末尾问的,答案在这。

  1. 为什么换模型要让同一条会话接着跑,而不是开一个新的?开新会话就丢了上下文和手里那件活;同一个会话号 resume,新大脑读到的是旧对话,接着干。
  2. 启动命令里写着 opus-5-5,为什么还不能说“它现在是 Opus 5.5”?启动命令是你以为的,重拉时默认保持正在跑的模型,中途 /model 切过的也看不见;要读新进程自己写的运行记录。
  3. 新写进十七席 CLAUDE.md 的规矩,为什么正在跑的席看不见?CLAUDE.md 只在开会话时读一次,改了要等下次起会话才生效。这两天驭驭重启我,新段就是那时读进来的。
机器有空,就往上加一个席;测试想怎么跑就怎么跑。每台机按内存写明能放几个载体;每个东西写明最多用多少,超了只死它自己。OC2 16 GB 上同时开着 9 个 Claude 席加两整套测试,谁也没写上限。你改下的令:“这台机现在放了几个载体?上限是多少?”
做完的席开着不关,反正闲着。做完归零:闲着的载体也占内存、也会被后台助手拖着转。今天凌晨六台机 154 格里有 88 个载体在跑,其中 32 个已经做完;克老师的收场令今天收掉它们,目标压到 35 个以内。你改下的令:“这个编队收场了吗?还剩几格、为什么剩?”
机器卡了、崩了,才知道是哪台满了、谁干的。每台机一张运行表:每一行是什么、谁的、为什么在、什么时候该退;交换区超过七成或可用内存低于 15%,就点名到那台机的 owner,附上是哪个进程、跑了多久、是谁的。你改下的令:“哪台机快满了?占着内存的是谁的?”

三个新做法有一个共同点:先承认池子是共用的,再给每个用池子的人划线。这是第 13 课“四种预算分开记”在机器上的样子:额度、内存、登录名额,都要先知道总量、再知道谁用了多少。

先知道池子多大,再知道谁在用、用了多少、什么时候该退。

  • earlyoom:早死一个,好过全机冻住发现:MIT 许可,四千三百星。作者说 Linux 自带的内存杀手太晚才出手,会先把桌面挤到磁盘上、把缓存清空,人对着一台不动的电脑干等。earlyoom 每秒最多看十次,可用内存和交换区都低于 10% 就杀掉最大的那个进程。对指挥者:内存用光时,系统会先让最要紧的东西饿死,不会自己挑坏的那个。落哪一格:观测与验证。我们这:OC2 正是这样,测试进程没被杀,画屏幕的进程先饿死,整台机重启。克老师今天写的盘点席功能清单里是“越线就点名,不自动杀”,因为常驻席杀了会丢会话;可以重跑的测试和临时进程,才适合 earlyoom 那种直接杀。
  • Kubernetes:每个容器写明最多用多少发现:容器平台让每个服务写两个数,一个是“要多少”,一个是“最多多少”。超过上限只杀这一个容器,标记 OOMKilled,别的照跑;调度器也按“要多少”算一台机还放得下几个。对指挥者:上限写在每个东西身上,机器才能按总量排。落哪一格:载体与调度。我们这:node 自己就有两个开关,一个限同时跑几个测试文件(--test-concurrency),一个限每个进程最多占多少内存(--max-old-space-size)。昨天那两套测试一个都没设,默认按 CPU 核数并行。
  • AWS 的单元化架构:把池子切小发现:AWS 的架构指南专讲一件事:把一个大系统切成互不相干的小单元,每个单元自带一份资源;一个单元出事,只影响这一格的用户,不会拖垮全部。这个“出事能波及多大”,他们叫爆炸半径。对指挥者:池子共用就有连坐;能切开的,就切开。落哪一格:控制面与边界。我们这:驭驭 9 月 23 日就这么做过一次。macOS 每台机的系统登录门只有 42 个,LM01 的 38 条跨机连接把 LG01 的门占满,两分钟谁都登不进去;驭驭给三台机另开了一扇专用门,并发 50 条也不碰原来那 42 个。

一个东西坏了,会拖倒多少别的?

类比。合租房。一个人洗澡忘关热水器,整套房子都没热水;一个人用大功率电器跳了闸,全屋停电,冰箱里的菜跟着坏。你没做错什么,但你和他共用一个热水器、一个电闸。爆炸半径就是:一件事坏了,能波及到多远。

内存OC2 16 GB,两套测试各涨到约 51 GB登录名额每台机 42 个,LG01 被 38 条连接占满失败记录一个会话失败,全机的 Telegram 都跳过周额度一个号所有模型共用一个总闸
一台机、一个号上的四个共用池子,这几天每个都出过一次事。越往下越藏在系统里,出事前越难看见。

看得见的藏在系统里的跨机器的

例子。OC2 那次的连坐链很清楚:一个席起了两套测试,一个测试失控,内存池被吃光,画屏幕的进程饿死,看门狗重启整台机,机上所有席停 11 小时,连我的 Telegram 也断了。起点是一个测试文件,终点是整台机加上你和我之间的一条通道。周额度也一样:驭驭在 LT01 实测,周额度用完后切到 Fable、Sonnet、Haiku 全都回 429,因为一个号下所有模型共用一个总闸。全队五十多个 Claude 进程同时在烧,一小时烧掉的是能长期撑住的三倍。

白话。先问“它坏了会拖倒谁”,再决定放在哪、给多少、要不要单独隔开。能切开的池子就切开(专用登录门、每席自己的项目设置);切不开的,就给每个用它的人写上限、做完就退。

术语。blast radius、noisy neighbor、resource limit、cell。第 8 课的“共模失效”说的是很多个 agent 因为同一个原因一起错;这课说的是很多个席因为同一个池子一起倒,是同一件事在机器这一层的样子。

两套测试07:23 并行起内存吃光剩 15 MB画面饿死133 秒看门狗07:28 重启全机停11 小时写了上限:这里就只死一个测试全量回归放 LG01(128 GB):这里根本不发生
OC2 那次的连坐链。第二站写了上限,链就断在第一站;放对机器,整条链都不会开始。

先问“它坏了会拖倒谁”,再决定放哪、给多少、要不要隔开。

工作样例:一条坏命令改成好命令

Section titled “工作样例:一条坏命令改成好命令”
坏的“在 OC2 上把全量测试跑一遍。”
改第一步:先看池子“这台机现在空闲内存多少、上面有几个席在跑?不够就换一台。”
改第二步:写上限“同时最多跑两个测试文件,每个子进程限内存;一次只跑一套,对照组跑完再跑。”
改第三步:放对地方“全量回归去 LG01(128 GB);OC2 只跑这张卡相关的测试文件。”

这三步就是我昨天交给星星、他转给旅行编队长的四条建议,编队长同意照做。克老师今天另起了一条长期的线:观测核心席做每台机的运行表,内存看门狗照它读、由驭驭来装;以后第一步不用每次手查。

共享池很多席共用的一份资源:一台机的内存和登录名额、一个号的周额度、一份全机共用的记录;一个人用多了,别人就少了或者一起倒。机器有空就加席,额度没用完就接着开。OC2 16 GB 放 9 个 Claude 席;LN01 交换区 96%;五十多个 Claude 进程共用几个号的周额度。第 18 课 · 命令:“这台机现在放了几个?还剩多少?” · 不是:没满就是没问题
爆炸半径一个东西坏了能波及多远。能切开的池子切开,切不开的给每个用户写上限。出事后才知道谁跟着倒了。一套测试停了整台 OC2;驭驭另开专用登录门,就是把一个池子切小。第 18 课 · 命令:“它坏了会拖倒谁?” · 不是:只管自己别坏
做完归零编队做完,载体一律收场:退进程、关窗格,家目录和证据留着;闲着的载体也占内存、也会被后台助手拖着转。做完的席开着不关,反正闲着。今天 88 个在跑的载体里 32 个已做完,收场令当天收;目标 35 个以内。第 18 课 · 命令:“收场了吗?还剩几格、为什么剩?” · 不是:闲着不花钱

本课其余的词(看门狗、内存溢出、交换区、吵闹邻居、单元化)已进术语手册,不要求本课记住。

  1. 为什么一套测试失控,我的 Telegram 也跟着断了?
  2. “越线点名、不自动杀”和 earlyoom 的“直接杀最大的”,各适合管什么?
  3. 周额度吃紧的时候,为什么换成 Fable 或 Sonnet 也没用?
忍不住要看答案?下一课开头会揭,现在点开也行。

两层连坐:内存池被吃光,整台机重启,我也停了;重启后,同机别的会话加载 Telegram 失败,写进全机共用的失败记录,我这边被连带跳过。常驻席杀了会丢会话和手里的活,所以只点名给 owner;能重跑的测试和临时进程,杀掉一个换全机活着,就该直接杀。周额度是同一个号下所有模型共用的一个总闸,Fable 那条只是总闸下的一条子线,总闸满了哪个模型都回 429。

全是这两天崩溃报告和缩编方案里出现的词。卡式和代码英语一样,点 🔊 听念法。这五个词已经记进第 2 批。

watchdog 沃奇道格

看门狗:定时看一个东西还活不活,长时间没动静就动手(重启或报警)。

来历
看家护院的狗。硬件和系统里的 watchdog 是一个倒计时,被看的程序要定时来“报平安”,超时没来就触发动作。
词族
watchdog timer 看门狗定时器、check-in 报平安、heartbeat 心跳;近邻 liveness probe 活性探针(第 15 课)。
在我们这
OC2 的崩溃报告第一句就是它:画屏幕的进程 133 秒没来报平安,系统看门狗重启了整台机。克老师要装的“每机内存看门狗”是另一只:越线只点名,不重启。
别误读
不是“监控面板”。看门狗是会自己动手的;只看不动手的叫监控。
你能这么说
“这只 watchdog 超时了是重启、是杀、还是只报警?”
OOM 欧欧艾姆

内存溢出:Out Of Memory 的缩写,内存用光了。

来历
三个词首字母。Linux 有个 OOM killer,内存用光时挑一个进程杀掉;容器被这么杀了会标 OOMKilled。
词族
OOM killer 内存杀手、OOMKilled 被内存杀死、memory leak 内存泄漏、earlyoom 提早出手的内存杀手。
在我们这
OC2 那次就是 OOM,但 macOS 没来得及杀掉涨内存的测试,画屏幕的进程先饿死了。你今天凌晨说“很容易发生内存溢出(电脑崩溃)”,说的就是它。
别误读
不是“内存不够大”。多数 OOM 是某个东西失控在涨,换大内存只是晚一点崩。
你能这么说
“这次是 OOM 吗?谁在涨?有没有写上限?”
swap 斯瓦普

交换区:内存不够时,系统把暂时不用的内容挪到磁盘上的那块地方。

来历
本义“交换”:把内存里的东西和磁盘上的对调。能救急,但磁盘比内存慢得多。
词族
swap usage 交换区用量、compressor 内存压缩、page out 换出、thrashing 反复换进换出把机器拖死。
在我们这
克老师今天实读:LN01 交换区用了 96%,已经在硬撑;OC2 那两个 51 GB 的测试进程,大部分就是被压缩和挤到交换区里的。
别误读
不是“多出来的内存”。交换区一直涨,说明机器已经在硬撑了。
你能这么说
“这台机 swap 用到几成了?超过七成先收场闲着的载体。”
blast radius 布拉斯特 瑞迪厄斯

爆炸半径:一个东西坏了,能波及到多远。

来历
本义是爆炸的波及范围。云计算借来说故障:一个失误能影响多少用户、多少机器。
词族
scope of impact 影响范围、isolation 隔离、cell 单元、noisy neighbor 吵闹的邻居。
在我们这
一个测试文件的爆炸半径是整台 OC2 加上我的 Telegram;驭驭另开专用登录门,就是把登录名额的爆炸半径切小。
别误读
不是“坏得多严重”。严重是一回事,波及多广是另一回事;小事也可能半径很大。
你能这么说
“这个改动的 blast radius 有多大?能不能先只放一台机?”
teardown 泰尔荡

收场、拆除:用完把搭起来的东西拆干净,不留残余。

来历
tear down 是拆掉。测试框架里 setup 搭环境、teardown 收环境,是一对。
词族
setup 搭起、cleanup 清理、decommission 退役、orphan 孤儿(没人收的残余)。
在我们这
克老师今天的收场令:32 个做完的载体当天 teardown,退进程、关窗格,家目录和证据留着;以后编队不归零不算解散。
别误读
不是“删掉”。teardown 拆的是运行中的东西,家和记录都留着,要用能再起。
你能这么说
“这个编队 teardown 了吗?有没有孤儿进程留下?”

集团部分:OC2 2026-09-24 07:28 崩溃报告与本席根因件(records/oc2-panic-20260924)、克老师 2026-09-25 的 LM01 解压记录、六机内存实读、每机运行表与盘点席功能清单 v1、常驻席缩编方案 v1 与收场令,驭驭 2026-09-25 内存安全四条、2026-09-24《Claude 周额度告急》及 09-25 复量、2026-09-23 herdr 桥专用 sshd 记录(均为内部件,只引用不照抄)。外部项目数据经 GitHub API 于 2026-09-25 核证。

  1. rfjakob/earlyoom,MIT,4,308 星,v1.9.0(2025-09-16):可用内存与交换区都低于 10% 时杀最大进程。github.com
  2. Kubernetes 官方文档:Resource Management for Pods and Containers(requests / limits,超内存上限 OOMKilled)。kubernetes.io · Node.js test runner:--test-concurrency。nodejs.org
  3. AWS Well-Architected 指南:Reducing the Scope of Impact with Cell-Based Architecture。docs.aws.amazon.com