← На главную

Codex от Anthropic: 37 ТБ логов за 21 день, 96% — мусор из-за SQLite TRACE

22.06.2026 07:30 · hackernews

Codex от Anthropic оказался неожиданно агрессивным потребителем SSD. Пользователь заметил, что за 21 день работы Codex записал около 37 ТБ данных в локальную SQLite-базу логов (~/.codex/logs_2.sqlite и сопутствующие -wal, -shm файлы). Экстраполяция даёт пугающую цифру: ~640 ТБ в год. На 1-терабайтном SSD это примерно 640 полных перезаписей в год. Учитывая, что многие потребительские SSD рассчитаны на 600 TBW (терабайт записанного), ресурс накопителя может закончиться меньше чем за год.

Откуда столько данных? Текущая база хранит около 682 000 строк, что занимает чуть больше 1 ГБ. Но это только «надводная часть» — реальная запись гораздо выше. 15-секундный замер показал: за это время было вставлено примерно 36 211 строк, при этом общее количество строк не изменилось. Механизм insert-and-prune: строки постоянно добавляются, индексируются, пишутся в WAL, а затем удаляются. Огромный оверхед.

Кто главный виновник? Уровень TRACE занимает 70,7% всех хранящихся байт. Ещё 25,3% — дублирующие телеметрические логи от codex_otel.log_only и codex_otel.trace_safe. В сумме — 96% логов. Самые частые источники TRACE — это сырые события inotify (открытие файлов вроде ld.so.cache, locale.alias, passwd), низкоуровневые логи tokio-tungstenite (WebSocket), и внутренние сообщения OpenTelemetry SDK. Например, 128 тысяч записей про открытие ld.so.cache, 38 тысяч про locale.alias. На уровне INFO — в основном повторяющиеся события OpenTelemetry, например, 843 записи про использование системных корневых сертификатов.

Причина — глобальный default TRACE в SQLite-логах: Targets::new().with_default(Level::TRACE). Всё, что может логироваться, логируется на TRACE, включая зависимости и сырые данные протоколов.

Предлагается не отключать логи полностью, а настроить фильтры по умолчанию: не писать глобальный TRACE, поднять пороги для шумных внутренностей (inotify, tokio-tungstenite, OpenTelemetry SDK), не сохранять сырые тела WebSocket/SSE запросов, а сохранять только сводки (тип события, длительность, успех/ошибка, токены). Убрать дублирующие codex_otel.log_only/trace_safe сообщения. Добавить глобальное ограничение размера/числа записей. И опционально — флаг sqlite_logs_enabled = false.

Читать оригинал →