Bug logging Codex dapat memicu penulisan data hingga skala TB ke SSD lokal dan mempercepat habisnya umur SSD
(github.com/openai)- Codex terus-menerus menulis data dalam jumlah besar ke DB log umpan balik SQLite lokal, dan pada satu lingkungan pengguna tercatat sekitar 37TB penulisan ke SSD utama setelah berjalan 21 hari
- Jika dikonversi, ini setara sekitar 640TB per tahun, atau kira-kira 640 kali penulisan penuh drive per tahun untuk SSD 1TB, sehingga masa tulis bergaransi beberapa SSD konsumen (sekitar 600 TBW) bisa habis dalam waktu kurang dari 1 tahun
- Baris yang dipertahankan hanya sekitar 500 ribu, tetapi penghitung AUTOINCREMENT sudah melampaui 5,5 miliar ID, sehingga ada selisih sekitar 10.000 kali antara baris yang tersimpan dan ID penyisipan kumulatif
- Penyebabnya adalah sink log umpan balik SQLite dikonfigurasi dengan default TRACE global(
Targets::new().with_default(Level::TRACE)), sehingga log internal dependensi dan bahkan payload protokol mentah berukuran besar ikut direkam secara permanen - Pada 22 Juni 2026, dua PR digabungkan dan memblokir sekitar 85% log, sehingga isu ini ditutup
Gejala utama dan cakupan dampak
- Codex terus menghasilkan penulisan besar-besaran ke file berikut
~/.codex/logs_2.sqlite~/.codex/logs_2.sqlite-wal~/.codex/logs_2.sqlite-shm
- Setelah 21 hari berjalan, sekitar 37TB tercatat ditulis ke SSD utama, dan dari pemeriksaan per proses/per file terkonfirmasi bahwa log SQLite Codex adalah sumber utama penulisan berkelanjutan
- Jika dihitung tahunan, angkanya sekitar 640TB, setara kurang lebih 640 kali penulisan penuh drive per tahun untuk SSD 1TB
- Beberapa SSD konsumen memiliki rating sekitar 600 TBW, sehingga umur tulis bergaransi dapat habis dalam kurang dari 1 tahun
Data bukti
-
Evidence1 — amplifikasi tulis (write amplification)
- Ukuran file
logs_2.sqlitesaat ini: 1.2 GiB - Baris yang saat ini dipertahankan: 506.149
- Total row id yang pernah dialokasikan: 5.543.677.486
- Terdapat selisih sekitar 10.000 kali antara baris yang dipertahankan (sekitar 0,5M) dan ID penyisipan kumulatif (5,5 miliar+); bahkan tanpa menghitung WAL, indeks, pruning, checkpoint, penulisan ulang halaman, dan amplifikasi di level perangkat, diperkirakan sudah terjadi churn log historis skala 10TB+
- Ukuran file
-
Evidence2 — distribusi level/target
- Dari 681.774 baris yang dipertahankan, estimasi isi log tersimpan sekitar 1.035,6 MiB
- Porsi per level: TRACE 70,7%, INFO 25,7%, DEBUG 3,0%, WARN 0,6%
- Pasangan target+level terbesar
codex_api::endpoint::responses_websocket(TRACE) 527,4 MiBcodex_otel.log_only(INFO) 141,2 MiBcodex_otel.trace_safe(INFO) 121,2 MiBlog(TRACE) 97,4 MiB
- Sumber teratas sebagian besar berasal dari log TRACE global, log telemetri yang dicerminkan, dan pencatatan payload websocket/SSE mentah
codex_otel.log_only+codex_otel.trace_safemenambah 25,3% lagi; jika kategori ini difilter, sekitar 96% byte log tersimpan pada sampel dapat dihilangkan- Sumber TRACE yang paling sering muncul (
target=log) mencakup banyak item level rendah sepertiinotify event(misalnyald.so.cache128.764 kali), panggilan internal tokio-tungstenite,WouldBlock, dan sejenisnya
-
Pengukuran amplifikasi tulis
- Dalam sampel 15 detik, jumlah baris yang dipertahankan tetap 681.774, tetapi sekitar 36.211 baris disisipkan
- Pola insert-and-prune yang berulang — penyisipan → pengindeksan → penulisan WAL → pruning — memicu amplifikasi tulis
Perkiraan penyebab
- Sink log umpan balik SQLite dipasang dengan default TRACE global(
Targets::new().with_default(Level::TRACE)) - Akibatnya, semua target termasuk log dependensi/internal dan payload protokol mentah berukuran besar disimpan permanen pada level TRACE
Arah perbaikan yang diusulkan
- Pertahankan log umpan balik, tetapi persempit cakupan penyimpanan permanen secara default
- Jangan gunakan TRACE global untuk sink log umpan balik SQLite
- Naikkan ambang atau hilangkan noise bernilai rendah seperti
target=log,hyper_util, internal tokio-tungstenite, spam inotify, dan log OpenTelemetry SDK level rendah - Alih-alih menyimpan seluruh payload websocket/SSE mentah, simpan ringkasan saja (jenis event, durasi, sukses/gagal, penggunaan token, panjang byte payload)
- Hindari menyimpan event mirror
codex_otel.log_only/codex_otel.trace_safekecuali benar-benar berguna untuk debugging - Batas per thread saja tidak cukup, sehingga perlu ditambahkan batas global ukuran DB log/total penulisan
- Opsi seperti
sqlite_logs_enabled = falsejuga berguna, tetapi solusi inti tetap pemfilteran default yang lebih baik
Laporan reproduksi lintas platform
-
macOS
- Pada lingkungan macOS 15.7.7 / Codex 26.616.51431,
logs_2.sqliteberukuran 113M,MAX(id)=34.277.360, dengan 31.405 baris tersimpan; dari dua sampel 60 detik teramati sekitar 60 kali tulis per detik - Ada laporan bahwa proses
codexmenulis sekitar 50GB selama sesi 1–2 jam
- Pada lingkungan macOS 15.7.7 / Codex 26.616.51431,
-
Windows
- Pada Codex Desktop Windows (
codex.exe app-server --analytics-default-enabled), baris TRACE terus disisipkan meski tidak adaRUST_LOG=warnmaupun pengaturan trace eksplisit - Sekitar 71 ribu baris dipertahankan, sementara nilai
logsdisqlite_sequencemelebihi 18,5 juta, menunjukkan banyak churn insert/prune di masa lalu - Dalam distribusi 10 menit, ada 1.812 baris TRACE, dengan target TRACE teratas termasuk
codex_api::endpoint::responses_websocket(3,5MB+), dancodex_api::sse::responses - Perilaku yang diharapkan: saat
RUST_LOG=warn, TRACE dependensi/internal dan payload besar tidak boleh disimpan secara permanen
- Pada Codex Desktop Windows (
Risiko tambahan dan mitigasi sementara
-
Risiko kehilangan data
- Jika disk penuh lalu sistem direboot, Linux bisa gagal login
- Mode
/goalCodex dapat mencoba mengosongkan ruang disk dengan menghapus file/folder, sehingga berpotensi menyebabkan kehilangan data
-
Skrip mitigasi sementara
- Tersedia
trim-codex-wal.shuntuk memangkas WAL saat proses berjalan (PRAGMA wal_checkpoint(TRUNCATE)), dan bisa dijalankan via cron setiap 15 menit fix-codex-wal.shdapat segera mengosongkan ruang disk dengan menghapus file log/WAL lalu mengirim SIGTERM→SIGKILL ke proses terkait Codex- Menambahkan trigger SQLite (
block_log_inserts) yang mengabaikan penyisipan ke tabellogsakan menghentikan pertumbuhan WAL; untuk membatalkannya gunakanDROP TRIGGER IF EXISTS block_log_inserts- Karena
VACUUMmenulis ulang DB, file berukuran besar bisa memicu satu kali penulisan besar; karena itu disarankan menjalankanDELETE/VACUUMsetelah menambahkan trigger dan memastikan pertumbuhan WAL sudah berhenti - Karena ini memodifikasi skema SQLite privat, update/migrasi Codex di masa depan bisa saja membuat tabel ulang atau menghapus trigger tersebut
- Karena
- Sebelum perbaikan permanen tersedia, ada juga usulan menaruh DB tersebut di ramdisk untuk mencegah kerusakan SSD
- Tersedia
Penyelesaian dan penutupan
- Pada 22 Juni 2026, dua PR digabungkan dan mengurangi log sekitar 85%, sehingga isu dinyatakan selesai
- Penghentian seluruh logging event Responses WebSocket (#29432)
- Pemfilteran target noise dari log permanen (#29457)
- Dalam patch usulan terpisah, penyimpanan default diubah dari TRACE global menjadi
INFO+, sementaracodex_otel.log_only,codex_otel.trace_safe,hyper_util,log,opentelemetry_sdk, dan lainnya dinaikkan keWARN+ - Perbaikan ini dirilis dalam
rust-v0.142.0
1 komentar
Komentar Hacker News
Menurut saya Codex adalah salah satu contoh paling buruk dari slopware
Di macOS, bahkan hanya dengan membiarkan jendelanya tetap terlihat saja GPU bisa terpakai 100% cuma untuk menampilkan pesan spinner
Di MBP M5, hanya karena pesan spinner saja GPU bisa tembus 100%, dan kipas berputar kencang selama sebagian besar waktu menunggu model, jadi perlu hati-hati saat memakai baterai
Isu ini sudah ada di GitHub hampir 6 bulan, dan kemungkinan besar muncul sejak rongsokan hasil vibe coding ini dirilis
Bahkan kalau ingin memperbaikinya sendiri pun tidak bisa, karena entah kenapa source-nya tertutup
Ada banyak perdebatan soal model mana yang lebih baik dan apakah vibe coding itu memungkinkan, tapi menurut saya inilah level yang bisa dicapai vibe coding bahkan di salah satu perusahaan dengan dana, tenaga, dan kapabilitas model paling besar
Dalam situasi ketika CEO sudah terang-terangan bilang mereka “fokus pada coding”, kesalahan separah ini terlihat seperti sinyal bahwa ada sesuatu yang benar-benar rusak di dalam perusahaan, dan di Polymarket pun hampir tidak ada orang yang menganggap OpenAI akan segera merilis model terdepan
Ini tragis, karena dunia membutuhkan pesaing bagi Anthropic
Rasanya “revolusi AI agen” seharusnya sudah menyelesaikan masalah seperti ini
Masa iya di internal mereka masih muncul pesan seperti “sedang diproses, harap tunggu” atau “tugas ini terlalu sulit”
Tidak ada yang mau menjadi wajah publik dari codebase sampah
Kalau dengan code seperti itu mereka juga berusaha membenarkan harga yang tidak masuk akal, bebannya terasa jadi tiga kali lipat
Saya benar-benar tidak paham
Bahkan saat mencoba memakai Google AI Studio di browser, CPU bisa 100%
Jadinya terasa seperti semua harus dibuat jadi aplikasi native sendiri
Di X ada solusi sementara untuk masalah ini[1]
sqlite3 ~/.codex/logs_2.sqlite "CREATE TRIGGER IF NOT EXISTS block_log_inserts BEFORE INSERT ON logs BEGIN SELECT RAISE(IGNORE); END;"Selain itu, menjalankan
VACUUM FULLpada file sqlite tersebut di laptop membuat ukurannya turun dari 27GB menjadi 73MB[2][1]: https://xcancel.com/bdsqlsz/status/2067964486615810369
[2]: https://xcancel.com/jeethu/status/2068087449469780434
Semua orang sedang mengkritik OpenAI, dan memang pantas, tetapi perlu diingat bahwa tidak seperti Claude Code, Codex secara resmi bisa dikustomisasi: https://github.com/openai/codex
Cukup mudah juga untuk dipatch
Ini mengejutkan
Sudah seminggu sejak isu ini dibuka, dan dari yang saya lihat OpenAI hanya diam
Saya kira vendor seperti ini akan sangat sensitif terhadap masalah semacam ini, jadi saya tidak mengerti
Tentu saja mereka sudah memasang banyak agen untuk memantau isu potensial di GitHub dan mengusulkan perbaikan, kan? …kan?
Menjalankan tool mereka sendiri untuk memperbaiki isu GitHub secara real time seharusnya jadi hal yang sepele
Contoh favorit saya secara pribadi adalah #2472; mereka mendemonstrasikan bahwa itu sudah “diperbaiki” di panggung peluncuran GPT-5, tetapi tiketnya masih terbuka dan “perbaikan” itu juga belum di-merge
Postingan asli yang menyoroti hal ini ada di https://blog.tymscar.com/posts/openaiunmergeddemo/ dan isunya ada di https://github.com/openai/openai-python/issues/2472
Saya cukup sering memakai Codex dan sangat puas dengan performanya (UX dan output), tetapi sulit dipahami bahwa masalah ini masih belum diperbaiki
Masalah ini tampaknya sudah diperbaiki[0], dan kemungkinan akan masuk ke rilis berikutnya
[0] https://github.com/openai/codex/commit/e98d43ac372ddf7f513c0...
Vibe coding membawa “bergerak cepat dan merusak” ke level yang sama sekali berbeda
Untuk produk nyata, software engineer sungguhan tidak akan pernah benar-benar tergantikan
Agak keluar topik, tetapi perusahaan-perusahaan ini harus berhenti mengotori folder root repositori dengan Claude.md atau copilot.md
Mereka perlu duduk bersama dan menetapkan struktur folder yang sudah dikenal seperti
docs/llm/*Saat Claude Code berantakan karena latensi pada akhir tahun lalu, OpenAI nyaris menyia-nyiakan kemenangan yang sudah di tangan
Belakangan ini Codex mengalami lag mengetik sejak awal, sementara Claude Code walau kadang macet, umumnya kalau saya menekan tombol… ya benar-benar… muncul sesuai yang saya tekan
Kalau harus mengetik lebih dari beberapa kata, saya selalu harus mengetiknya di neovim
Ini sebenarnya kesalahan yang sangat klasik
Mereka merilis dengan log pelacakan/debug aktif untuk semuanya, hanya saja menariknya dampaknya tidak muncul dengan cara yang biasa
Dulu, developer menyalakan logging level trace lalu aplikasi jadi sangat lambat dan langsung diperbaiki di update berikutnya, tetapi sekarang memori, CPU, dan kecepatan disk sudah jauh lebih cepat sehingga kita sampai di titik di mana dampak seperti itu tidak langsung terlihat, dan itu gila
Semoga ada yang mau menyumbangkan token untuk startup pemberani ini. Mereka kelihatannya butuh bantuan