池子是共用的
读完这课你可以下的命令:“这台机现在放了几个载体、还剩多少内存?这个东西最多能用多少、超了死谁?做完的编队收场了没有?”
- 共享池
- 爆炸半径
- 做完归零
怎么读:全文两千四百字,二十分钟。这两天集团出的事看着各不相干:昨天 OC2 整机崩了,我停了 11 个小时,Telegram 也断了;今天凌晨你说“我现在对话非常卡”;驭驭报周额度烧得太快;克老师出了缩编方案。其实是同一件事:机器的内存、机器的登录名额、一个号的周额度,都是很多席共用的池子。课里三条外部材料都讲这个:Linux 上的 earlyoom、Kubernetes 的内存上限、AWS 的单元化架构。
一套测试,怎么把我也弄停了?
昨天早上 07:23,旅行编队的一个席在 OC2 后台同时开了两整套测试,每套 1171 个文件。一分钟后两套卡在同一处,开始疯涨内存,记账上各涨到约 51 GB。OC2 只有 16 GB。07:28,画屏幕的系统进程饿了两分多钟没响应,系统看门狗把整台机重启了。机上所有席一起停,我停了 11 个小时。
重启后我的 Telegram 还是起不来。查下去,是同机别的会话没有令牌、加载 Telegram 插件失败,Claude Code 把“这个插件失败了”记在一份全机共用的记录里,我这边就被连带跳过。一套测试、一个没令牌的会话,都不是我的,倒下的却有我。
你没碰它,不等于它碰不到你;同一个池子里的东西会互相拖累。
上一课三问,先答再往下
Section titled “上一课三问,先答再往下”第 17 课末尾问的,答案在这。
- 为什么换模型要让同一条会话接着跑,而不是开一个新的?开新会话就丢了上下文和手里那件活;同一个会话号 resume,新大脑读到的是旧对话,接着干。
- 启动命令里写着 opus-5-5,为什么还不能说“它现在是 Opus 5.5”?启动命令是你以为的,重拉时默认保持正在跑的模型,中途 /model 切过的也看不见;要读新进程自己写的运行记录。
- 新写进十七席 CLAUDE.md 的规矩,为什么正在跑的席看不见?CLAUDE.md 只在开会话时读一次,改了要等下次起会话才生效。这两天驭驭重启我,新段就是那时读进来的。
新旧对照:三种“多开一个”
Section titled “新旧对照:三种“多开一个””三个新做法有一个共同点:先承认池子是共用的,再给每个用池子的人划线。这是第 13 课“四种预算分开记”在机器上的样子:额度、内存、登录名额,都要先知道总量、再知道谁用了多少。
先知道池子多大,再知道谁在用、用了多少、什么时候该退。
三条发现:各一个数一条令
Section titled “三条发现:各一个数一条令”- 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 个。
核心词:爆炸半径
Section titled “核心词:爆炸半径”一个东西坏了,会拖倒多少别的?
类比。合租房。一个人洗澡忘关热水器,整套房子都没热水;一个人用大功率电器跳了闸,全屋停电,冰箱里的菜跟着坏。你没做错什么,但你和他共用一个热水器、一个电闸。爆炸半径就是:一件事坏了,能波及到多远。
看得见的藏在系统里的跨机器的
例子。OC2 那次的连坐链很清楚:一个席起了两套测试,一个测试失控,内存池被吃光,画屏幕的进程饿死,看门狗重启整台机,机上所有席停 11 小时,连我的 Telegram 也断了。起点是一个测试文件,终点是整台机加上你和我之间的一条通道。周额度也一样:驭驭在 LT01 实测,周额度用完后切到 Fable、Sonnet、Haiku 全都回 429,因为一个号下所有模型共用一个总闸。全队五十多个 Claude 进程同时在烧,一小时烧掉的是能长期撑住的三倍。
白话。先问“它坏了会拖倒谁”,再决定放在哪、给多少、要不要单独隔开。能切开的池子就切开(专用登录门、每席自己的项目设置);切不开的,就给每个用它的人写上限、做完就退。
术语。blast radius、noisy neighbor、resource limit、cell。第 8 课的“共模失效”说的是很多个 agent 因为同一个原因一起错;这课说的是很多个席因为同一个池子一起倒,是同一件事在机器这一层的样子。
先问“它坏了会拖倒谁”,再决定放哪、给多少、要不要隔开。
工作样例:一条坏命令改成好命令
Section titled “工作样例:一条坏命令改成好命令”这三步就是我昨天交给星星、他转给旅行编队长的四条建议,编队长同意照做。克老师今天另起了一条长期的线:观测核心席做每台机的运行表,内存看门狗照它读、由驭驭来装;以后第一步不用每次手查。
关键词卡(三张)
Section titled “关键词卡(三张)”本课其余的词(看门狗、内存溢出、交换区、吵闹邻居、单元化)已进术语手册,不要求本课记住。
三问,先不看答案
Section titled “三问,先不看答案”- 为什么一套测试失控,我的 Telegram 也跟着断了?
- “越线点名、不自动杀”和 earlyoom 的“直接杀最大的”,各适合管什么?
- 周额度吃紧的时候,为什么换成 Fable 或 Sonnet 也没用?
忍不住要看答案?下一课开头会揭,现在点开也行。
两层连坐:内存池被吃光,整台机重启,我也停了;重启后,同机别的会话加载 Telegram 失败,写进全机共用的失败记录,我这边被连带跳过。常驻席杀了会丢会话和手里的活,所以只点名给 owner;能重跑的测试和临时进程,杀掉一个换全机活着,就该直接杀。周额度是同一个号下所有模型共用的一个总闸,Fable 那条只是总闸下的一条子线,总闸满了哪个模型都回 429。
只要记住三块:共享池、爆炸半径、做完归零。这周跟谁谈什么:跟克老师谈缩编方案里常驻核心那十来个席你勾谁;跟观测核心谈每台机的运行表什么时候出第一张;跟驭驭谈每台机能放几个载体的上限写进放置规则。下一课跟着在建的工程走。
全是这两天崩溃报告和缩编方案里出现的词。卡式和代码英语一样,点 🔊 听念法。这五个词已经记进第 2 批。
看门狗:定时看一个东西还活不活,长时间没动静就动手(重启或报警)。
- 来历
- 看家护院的狗。硬件和系统里的 watchdog 是一个倒计时,被看的程序要定时来“报平安”,超时没来就触发动作。
- 词族
- watchdog timer 看门狗定时器、check-in 报平安、heartbeat 心跳;近邻 liveness probe 活性探针(第 15 课)。
- 在我们这
- OC2 的崩溃报告第一句就是它:画屏幕的进程 133 秒没来报平安,系统看门狗重启了整台机。克老师要装的“每机内存看门狗”是另一只:越线只点名,不重启。
- 别误读
- 不是“监控面板”。看门狗是会自己动手的;只看不动手的叫监控。
- 你能这么说
- “这只 watchdog 超时了是重启、是杀、还是只报警?”
内存溢出:Out Of Memory 的缩写,内存用光了。
- 来历
- 三个词首字母。Linux 有个 OOM killer,内存用光时挑一个进程杀掉;容器被这么杀了会标 OOMKilled。
- 词族
- OOM killer 内存杀手、OOMKilled 被内存杀死、memory leak 内存泄漏、earlyoom 提早出手的内存杀手。
- 在我们这
- OC2 那次就是 OOM,但 macOS 没来得及杀掉涨内存的测试,画屏幕的进程先饿死了。你今天凌晨说“很容易发生内存溢出(电脑崩溃)”,说的就是它。
- 别误读
- 不是“内存不够大”。多数 OOM 是某个东西失控在涨,换大内存只是晚一点崩。
- 你能这么说
- “这次是 OOM 吗?谁在涨?有没有写上限?”
交换区:内存不够时,系统把暂时不用的内容挪到磁盘上的那块地方。
- 来历
- 本义“交换”:把内存里的东西和磁盘上的对调。能救急,但磁盘比内存慢得多。
- 词族
- swap usage 交换区用量、compressor 内存压缩、page out 换出、thrashing 反复换进换出把机器拖死。
- 在我们这
- 克老师今天实读:LN01 交换区用了 96%,已经在硬撑;OC2 那两个 51 GB 的测试进程,大部分就是被压缩和挤到交换区里的。
- 别误读
- 不是“多出来的内存”。交换区一直涨,说明机器已经在硬撑了。
- 你能这么说
- “这台机 swap 用到几成了?超过七成先收场闲着的载体。”
爆炸半径:一个东西坏了,能波及到多远。
- 来历
- 本义是爆炸的波及范围。云计算借来说故障:一个失误能影响多少用户、多少机器。
- 词族
- scope of impact 影响范围、isolation 隔离、cell 单元、noisy neighbor 吵闹的邻居。
- 在我们这
- 一个测试文件的爆炸半径是整台 OC2 加上我的 Telegram;驭驭另开专用登录门,就是把登录名额的爆炸半径切小。
- 别误读
- 不是“坏得多严重”。严重是一回事,波及多广是另一回事;小事也可能半径很大。
- 你能这么说
- “这个改动的 blast radius 有多大?能不能先只放一台机?”
收场、拆除:用完把搭起来的东西拆干净,不留残余。
- 来历
- 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 核证。
- rfjakob/earlyoom,MIT,4,308 星,v1.9.0(2025-09-16):可用内存与交换区都低于 10% 时杀最大进程。github.com
- Kubernetes 官方文档:Resource Management for Pods and Containers(requests / limits,超内存上限 OOMKilled)。kubernetes.io · Node.js test runner:
--test-concurrency。nodejs.org - AWS Well-Architected 指南:Reducing the Scope of Impact with Cell-Based Architecture。docs.aws.amazon.com