2026: ulimit, память и CPU‑ограждения OpenClaw на арендованной Mac mini под launchd
OpenClaw на Mac mini M4 ProxyMac в регионах HK, JP, KR, SG или US умирает тихо, когда резидентная память пересекает то, что launchd считал безопасным: UI всё ещё показывает «running», но адаптеры каналов перестают принимать работу, потому что ядро вытесняло страницы быстрее интервала пробы. Операторы винят «плохие модели», хотя на деле дефолтный ulimit -n 256 у безнадзорных задач или fork‑штормы от детей MCP из настройки MCP. Это руководство 2026 сопоставляет тихие сигнатуры OOM, противопоставляет ulimit интерактивной оболочки и LaunchAgent, перечисляет три числовых порога телеметрии (70% RAM запас, 10k открытых файлов, 2 ГБ swapins в час), показывает фрагмент plist для SoftResourceLimits и связывает лимиты с параллельными агентами и health‑пробами, чтобы алертить раньше пользователей.
Сочетайте с устранением неполадок развёртывания для разбора логов и справочным центром; масштабируйте железо через тарифы, когда упираетесь в архитектуру, а не в опечатки.
Тихие OOM и сигналы лимитов — логируйте до обвинения моделей
Единое логирование macOS часто прячет события jetsam под info‑шумом. Следите за p95 задержки инструментов >4×, пока CPU <40% — это кричит о давлении на память, а не о медленных LLM. Ещё один маркер — ENOTFILE или Too many open files в stdio‑мостах MCP при всплесках параллельных агентов.
- Compressor swapins: устойчиво >500 МБ/ч на 16 ГБ mini — вы уже за комфортным запасом.
- Строки throttleReason LaunchAgent с
resource-limits— фиксируйте версию plist в git. - Ложные 502 от локальных HTTP‑шлюзов, когда дочерний воркер не может стартовать — часто
RLIMIT_NPROC.
launchd vs интерактивная оболочка: два разных мира ulimit
SSH‑сессии из ~/.zprofile могут выполнять ulimit -n 65535; ваш LaunchAgent — нет, пока не продублируете. Всегда печатайте лимиты внутри того же wrapper‑скрипта, что вызывает plist, а не из ноутбучной оболочки.
| Контекст | Типичный maxfiles | Кто задаёт | Риск |
|---|---|---|---|
| SSH‑логин | 10240+ | rc оболочки | Вводит в заблуждение при отладке launchd |
| Дефолт LaunchAgent | 256–1024 | ОС по умолчанию | Всплески MCP съедают быстро |
| После SoftResourceLimits в plist | 8192–65535 | Ваша ops‑команда | Должно совпадать с гигиеной FD в коде |
Пороги телеметрии, которые оправдывают пейджинг
Дополните существующий скрипт health‑пробы тремя числами в syslog каждую минуту: свободные страницы, число файловых дескрипторов и страницы компрессора. Звоните дежурному, если любые два подряд образца пересекают:
Фрагмент plist: SoftResourceLimits без fork‑бомбы launchd
Добавляйте ключи в словарь агента — не в глобальный домен. Держите hard ≤ soft × 1,25, чтобы ошибки конфигурации падали быстро, а не клинили систему.
<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key><integer>8192</integer>
<key>NumberOfProcesses</key><integer>512</integer>
<key>Stack</key><integer>8388608</integer>
</dict>
Перезагружайте launchctl kickstart -k gui/$(id -u)/com.example.openclaw только после второй SSH‑сессии — та же дисциплина, что в восстановлении перезапуска шлюза.
Параллелизм: умножьте RSS, прежде чем поднимать лимиты
Каждый параллельный агент в руководстве по параллелизму дублирует хэндлы моделей и сокеты MCP. Если удвоение параллелизма добавляет 3,2 ГБ RSS в лаборатории, не удваивайте NumberOfFiles «на всякий случай» — вы замаскиете утечки. Вместо этого ограничьте параллелизм, пока RSS укладывается в 70% физической RAM после базовых сервисов macOS.
RLIMIT_MEMLOCK редко помогает OpenClaw; держите секреты в связке ключей по усилению секретов, а не mmap‑кэши.
FAQ
Запускать OpenClaw от root ради лимитов? Нет — чините plist; root расширяет радиус поражения.
Достаточно ли Activity Monitor? Для точечных проверок да, но автоматические логи memory_pressure ловят ночные регрессии.
А Docker‑сайдкары? Если колокейтите контейнеры, сначала вычтите их RSS из бюджета 70%.
Почему Apple Silicon Mac mini всё ещё подходит тяжёлому OpenClaw
M4 с унифицированной памятью делит пропускную способность весов модели и сервисов macOS без сюрпризов PCIe NUMA дешёвых x86‑VM. Аренда по регионам через тарифы держит финансы в одной плоскости, когда нужен SKU 24 ГБ для более высоких лимитов, а нативная интеграция launchd честнее systemd‑в‑Linux контейнерах, которые притворяются «mac‑friendly». Версионируйте plist рядом с git‑коммитами по GitOps, ссылайтесь на это руководство при онбординге и списывайте mini по завершении нагрузки — лимиты проще на предсказуемом железе.
Подберите железо под OpenClaw
Mac mini HK / JP / KR / SG / US для автоматизации с запасом