Коротко
- RSS
openclaw-gatewayрастёт монотонно: 350 МБ → 15,5 ГБ за 2–3 дня. Дальше OOM, тихая гибель процесса,launchdперезапускает его в цикле. - Один из участников обращения #91588 связал рост с rest-деструктурированием на каждом фрагменте потока и условными spread-операциями в
baseModelCallEvent. ClawSweeper считает локализацию неустановленной.
Сверено с документацией OpenClaw 2026.9.8, 7 октября 2026.
Проблема воспроизводится на macOS и Linux с разным набором плагинов. Ниже — минимальный набор команд и настроек, чтобы увидеть рост и прикрыться до фикса.
Что происходит
В Issue #91588 на трекере OpenClaw Питер Ченг привёл замеры с macOS. После старта openclaw-gateway занимает около 350 МБ RSS. Через 2–3 дня обычной работы RSS доходит до 15,5 ГБ на машине с 8 ГБ RAM. Система уходит в своп, затем процесс убивает OOM. launchd перезапускает его, цикл повторяется по несколько раз в сутки. В gateway.err.log записей нет, процесс умирает молча.
Артур Соареш привёл замеры с Linux-хоста. При --max-old-space-size=6144 OOM не срабатывает, но к седьмому дню главный JS-поток залипает на 100% CPU. p99 задержки цикла обработки событий — около 8000 мс. Маркус Лассфолк описал похожую картину: снимок кучи показывает 28 строк по 0,5–1,16 МБ с дубликатами ACP codex-сессий.
Где ищут корень
После серии замеров с отключёнными плагинами Ченг локализовал причину в самом Gateway. На каждом фрагменте модельного потока выполняется rest-деструктурирование responseStreamChunkByteLengthUnchecked в selection-*.js (строка 8387). Когда фрагмент обёрнут в Proxy через observeModelCallStream, V8 переводит объект в словарный режим. Дальше срабатывает Runtime_CopyDataPropertiesWithExcludedPropertiesOnStack, который копирует ключи на каждом фрагменте. Вдобавок в baseModelCallEvent (строка 8459) лежат семь и больше условных spread-операций на каждый вызов модели.
ClawSweeper отметил, что высокой уверенности в воспроизведении на текущем main нет, а предложенные heap-ограничения и автоперезапуск не указывают, что именно удерживает память. Обращение остаётся открытым, готового исправления в релизе нет.
Мониторинг RSS
Самый простой способ — следить за выводом ps -o pid,rss,comm. В обращении #91588 Питер Ченг показывал RSS так:
ps -o pid,rss,comm
Оставляйте запас до объёма физической памяти и до значения --max-old-space-size.
Heap-лимит и сторожевой таймер
В обращении #91588 отсутствие heap-лимита названо одной из причин OOM на машине с 8 ГБ RAM. Там же предлагают добавить лимит по умолчанию (например, 4096 МБ) и перезапуск по RSS выше 4 ГБ как защиту.
Установка сервиса и основные команды:
openclaw gateway install
openclaw gateway start
openclaw gateway stop
openclaw gateway restart
openclaw gateway uninstall
Чтобы Gateway не замолкал на macOS после серии падений, добавьте проверку живости из документации по launchd. После серии крашей launchd перестаёт реагировать на KeepAlive=true, нужен внешний kickstart:
# Example launchd-aware liveness check, suitable for a 5-minute cron or LaunchAgent
state=$(launchctl print gui/$UID/ai.openclaw.gateway 2>/dev/null | awk -F'= ' '/state =/ {print $2; exit}')
if [ "$state" != "running" ]; then
launchctl kickstart -k gui/$UID/ai.openclaw.gateway
fi
Точка отката и диагностика
Перед любыми действиями сохраните рабочую версию. Если рост RSS не подтвердится, вы вернётесь за минуту.
openclaw gateway status
openclaw status
openclaw logs --follow
openclaw doctor
openclaw gateway status --deep
Для обращения соберите диагностический пакет. Экспорт работает и на нездоровом Gateway:
openclaw gateway diagnostics export
openclaw gateway diagnostics export --output openclaw-diagnostics.zip
openclaw gateway diagnostics export --json
В чате владельца доступна команда /diagnostics. Она требует одного подтверждения и сохраняет zip локально. Полезные файлы для прикрепления к обращению: summary.md, diagnostics.json, manifest.json и свежий stability/latest.json.
Что проверить у себя
- Выполните
openclaw gateway status --deepи проверьтеstateиrunsв выводеlaunchctl print gui/$UID/ai.openclaw.gateway. - Замерьте RSS командой
ps -o pid,rss,commи записывайте в лог сутки. - Сравните суточный прирост с запасом до объёма физической памяти и до планируемого
--max-old-space-size. - Если прирост заметно больше ожидаемого или RSS превысил 4 ГБ, соберите
openclaw gateway diagnostics exportи приложите к обращению #91588.