ИИ / Автоматизация 22 апреля 2026

2026: ulimit, память и CPU‑ограждения OpenClaw на арендованной Mac mini под launchd

Инженерная команда ProxyMac 22 апреля 2026 ~12 мин чтения

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
Дефолт LaunchAgent256–1024ОС по умолчаниюВсплески MCP съедают быстро
После SoftResourceLimits в plist8192–65535Ваша ops‑командаДолжно совпадать с гигиеной FD в коде

Пороги телеметрии, которые оправдывают пейджинг

Дополните существующий скрипт health‑пробы тремя числами в syslog каждую минуту: свободные страницы, число файловых дескрипторов и страницы компрессора. Звоните дежурному, если любые два подряд образца пересекают:

Пакет правил: свободная RAM ниже 2,5 ГБ на SKU 16 ГБ, открытые FD выше 8000 или страницы компрессора выше 120000 — пропорционально подстройте для машин на 24 ГБ.

Фрагмент 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‑сессии — та же дисциплина, что в восстановлении перезапуска шлюза.

Каждый параллельный агент в руководстве по параллелизму дублирует хэндлы моделей и сокеты 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 для автоматизации с запасом