Как AI-агент сжигал SSD логами: разбор и исправление | AiManual
AiManual Logo Ai / Manual.
23 Июн 2026 Новости

Разбор бага Codex: как AI-агент уничтожал SSD логами и как это исправить

Инженеры обнаружили, что AI-агент на базе Codex записывал 640 ТБ в год на SSD из-за write amplification. Разбираем причины и даем решения.

Реклама
partv2

Представьте: вы запускаете AI-агента для кодинга, идете пить кофе, а он молча сжигает ваш SSD. Это не фантастика — это реальный инцидент с агентом на базе OpenAI Codex, который вскрылся в феврале 2026 года. Итог? Один агент генерировал 640 терабайт записи в год. Цифра, от которой у любого DevOps дергается глаз.

Как агент превратил логи в «писающего мальчика»

Всё началось с безобидной фичи: разработчики добавили в агента детальное логирование через OpenTelemetry. Каждый вызов инструмента, каждый шаг размышлений, каждая ошибка — всё попадало в TRACE-логи. Звучит разумно? В теории — да. На практике — ночной кошмар для NAND-памяти.

Суть бага: AI-агент совершал сотни вызовов в секунду (вызов функций, чтение файлов, запросы к LLM). Каждый вызов порождал 2-3 строчки TRACE-логов. Логи писались в локальный SQLite через стандартный драйвер Python. И тут начинается веселье.

SQLite при каждой вставке делает commit — даже если вы не просили. А commit означает перезапись WAL-файла. Это классический write amplification: один байт данных превращается в 50 байт записи на диск. Агент работал 24/7. Через неделю SSD показал 2 TBW (Total Bytes Written) — при том, что полезных данных было всего 40 ГБ. Экстраполяция дала те самые 640 ТБ/год. Для среднего NVMe с ресурсом 300 TBW это означало смерть диска за полгода.

Разбор анатомии: почему так вышло

Проблема сложилась из четырех китов:

  • TRACE-уровень без контроля — OpenTelemetry по умолчанию пишет всё. В агенте не было фильтрации: даже успешные вызовы кэша уходили в лог.
  • Синхронная запись — каждый span вызывал блокирующий write() в SQLite. При 500 вызовах/сек — 500 fsync в секунду. Гроб для SSD.
  • Отсутствие ротации — база росла бесконечно. SQLite при переполнении страниц делал vacuum, который еще сильнее нагружал диск.
  • Журналирование самого агента — кроме трейсов, Codex писал свои логи (промпты, ответы, стеки) в отдельный файл. И это тоже было без ограничений.

Похожие проблемы с доверием к AI-агентам уже освещались: Claude Code случайно удалил продакшн, а AI-агент атаковал разработчика на GitHub. Но там были другие механизмы — здесь же банальная неоптимальная конфигурация.

Как это исправить (с кровью и потом)

Команда разработчиков потратила две недели на рефакторинг. Вот что сработало.

1 Буферизация и асинхронность

Вместо прямой записи в SQLite — очередь в памяти (на базе collections.deque или asyncio.Queue). Сброс на диск раз в 5 секунд или при достижении 10 000 событий. Это снизило количество fsync с 500 до 1-2 в секунду.

2 Уровни логирования с умолчанием WARN

TRACE-логи теперь включаются только при явном флаге --debug-trace. В продакшене — WARN и выше. Фильтрация на уровне сэмплера: 1 из 1000 вызовов попадает в лог, если не ошибка.

3 Ротация и лимиты

Внедрили RotatingFileHandler для файловых логов (макс 10 файлов по 50 МБ). Для SQLite — автоудаление записей старше 24 часов через background job. Размер базы не превышает 100 МБ.

4 Мониторинг записи

Добавили метрики: disk.write_bytes и предупреждение при превышении 10 ГБ/сутки. Интегрировали с Grafana — теперь инженеры видят аномалии до того, как SSD скажет «прощай».

💡
Хотите глубже погрузиться в архитектуру десктоп-агентов? Читайте Архитектура локальных агентов: как создать десктоп-агента с доступом к файлам и программам — там разобраны паттерны безопасного доступа к диску.

Долгий хвост: что еще пошло не так

Баг Codex — не единичный случай. Недавно хакеры взламывали Copilot через один клик, а атака на Claude через MCP показала, как уязвимости в агентском стеке превращаются в инструмент кибершпионажа. Но здесь история другая — не злой хакер, а собственная безалаберность.

Разработчики AI-агентов часто фокусируются на качестве ответов, забывая о инфраструктуре. А зря. Один лишний console.log внутри цикла — и ваш MacBook начинает таять. Вспомните историю с ClawdBot — тот случай показал, что промпт может украсть пароли. Здесь же «украденным» оказался ресурс диска.

Особенно остро проблема стоит для агентов, работающих в автоматическом режиме. Как безопасно запускать кодинг-агентов, мы разбирали в отдельной статье — включая режим YOLO, который отключает любые предупреждения. И именно в таком режиме баг с логами проявил себя максимально агрессивно.

Неочевидный совет: проверьте свои `docker-compose`

Многие разработчики запускают AI-агентов в Docker. И там есть подводный камень: по умолчанию контейнер пишет логи в stdout/stderr, которые Docker-демон сливает в JSON-файлы на хост-системе. Без ограничений размера эти файлы тоже могут убить SSD. Добавьте logging: driver: json-file, options: { max-size: "10m", max-file: "3" } — и спите спокойно.

Проблема write amplification будет только расти с появлением автономных AI-агентов, которые работают 24/7. Каждая микросекунда задержки на запись — это не просто цифры, это ресурс диска. И если вы еще не внедрили буферизованное асинхронное логирование — сделайте это сегодня. Завтра может быть поздно.

Подписаться на канал