Windows: ChatGPT.exe enters persistent CPU / ~1 GB/s process-read state until restart
What version of the Codex App are you using (From “About Codex” dialog)?
26.810.4967.0 (embedded app bundle 26.810.41047; runtime bundle 26.813.12317)
What subscription do you have?
Unknown — exact ChatGPT subscription tier was not exposed during diagnostics
What platform is your computer?
Windows 11 Home Single Language 64-bit, build 26200.9168; AMD Ryzen 7 6800HS (16 logical CPUs); 15.26 GB RAM; NVIDIA RTX 3050 Laptop
What issue are you seeing?
Summary
Codex Desktop became progressively slow and made the entire Windows desktop stutter. Switching tasks and starting responses took about 15 seconds. The affected ChatGPT.exe main process stayed in a high-CPU, high-process-read state until Codex was fully quit and relaunched. Performance returned to normal immediately after restart.
Measured impact before restart
- Main process PID 7376 sustained roughly 110–177% in Windows process CPU counters (about 1.1–1.8 logical cores).
- Process read-transfer counters repeatedly showed roughly 475–998 MB/s; two samples transferred 8.1–8.5 GB in 9–11 seconds.
- Working set was roughly 1.0–1.24 GB and private memory roughly 1.3 GB.
- One sample showed about 248,699 page faults/sec.
- Available RAM was about 2.1–2.6 GB.
The process-read counter can include cached files, IPC, devices, and other handles. Physical disk queues were normal/idle, so this is not being reported as 1 GB/s of physical SSD reads.
Immediately after restart
- New main process PID 13920 sampled at approximately 0% CPU and 0 MB/s process reads.
- Working set was roughly 370–385 MB.
- Available RAM recovered to roughly 3.8–4.2 GB.
- Desktop responsiveness returned.
Correlated app-state bug
The affected session also logged a conversation-state synchronization storm: 7,053 electron-message-handler errors, 2,549 unknown item/started events, 2,549 matching item/completed events, and 1,579 Conversation state not found messages.
Installed app code and logs show that a hidden avatarOverlay renderer mounts the full app, receives most lifecycle broadcasts for background/subagent tasks it has not hydrated, performs independent app-server reads, and logs many of these errors. Across the affected log, 2,098 unique reasoning-summary items were delivered exactly once to both the primary renderer and hidden overlay.
This is a real work-amplification/state-sync bug, but it is not proven to be the runaway root cause. After restart, the same mirrored overlay traffic and unknown-conversation errors continued at even higher rates while CPU and process reads remained healthy.
The strongest incident-only log difference was ResizeObserver loop warnings: 35 in a 13-minute affected window versus 1 in a 12-minute healthy post-restart window. This is correlation only because no useful stack was logged.
No relevant Windows events were found for disk, NTFS, storage, WHEA, GPU/display reset, power, or app crash. The previously oversized Codex diagnostic database was inactive; the current logs database was only about 30–33 MB with normal IDs.
What steps can reproduce the bug?
This has not been reproduced deterministically.
Observed conditions:
- Keep a very large, long-running Codex task open for several hours.
- Create many subagent tasks in its task tree.
- Keep Unity Editor open at the same time; it was using DirectX 11 and about 4.5 GB private memory but was mostly CPU-idle.
- With available RAM down to about 2.1–2.6 GB, continue switching among Codex tasks.
- Codex and then the whole desktop began stuttering; task changes and response starts took about 15 seconds.
- Fully quit and relaunch Codex. The runaway ended immediately.
Reopening the same large task and running four agents after restart did not reproduce the runaway, so task size, subagent fan-out, and RAM pressure may be stressors but are not sufficient causes.
Timeline (America/Santiago, UTC-4):
- 14:41:52 — whole-PC slowdown reported.
- 14:45–14:52 — sustained high main-process CPU/read counters captured.
- 14:55:37 — affected Codex session ended.
- 14:55:51 — new session began after a 14.4-second restart gap.
Affected desktop session: 2462e13b-b48e-4003-b9c5-7a26bb9df041
Healthy comparison session: 2901946c-cc09-4292-98f7-bb47641b4ad3
Active root task: 01a00097-dd17-72c0-a484-f061f597b38e
A Windows Performance Recorder trace was attempted, but system performance profiling could not be enabled (0xc5585011: Failed to enable policy to profile system performance), so no ETL call-stack trace was produced.
What is the expected behavior?
Codex should remain responsive during long-running tasks and subagent activity without leaving the desktop main process in a persistent CPU/process-read runaway.
A hidden overlay that is not presented should not mount and process the full app event stream, perform duplicate background reads, or receive lifecycle events for conversations it has not hydrated.
If sustained abnormal CPU/read activity occurs, the app should capture enough per-process stack and handle diagnostics to identify the source and recover without requiring a full restart.
Additional information
Relevant local logs
Affected:
%LOCALAPPDATA%\Codex\Logs\2026\08\14\codex-desktop-2462e13b-b48e-4003-b9c5-7a26bb9df041-7376-t0-i1-153705-0.log
Healthy comparison:
%LOCALAPPDATA%\Codex\Logs\2026\08\14\codex-desktop-2901946c-cc09-4292-98f7-bb47641b4ad3-13920-t0-i1-185551-0.log
Database check
- Active %USERPROFILE%\.codex\logs_2.sqlite: about 30–33 MB with normal IDs below 100,000 during investigation.
- The old pathological database is only an inactive backup: %USERPROFILE%\.codex\backups\20260814-1130-lag-reset\logs_2.sqlite (about 2.33 GB, IDs around 550–560 million).
- thread_history_1.sqlite was about 322 MB but had not been modified for hours before the incident.
Requested investigation
- Inspect why the desktop main process can enter a persistent CPU/process-read runaway without a renderer crash or queue-overflow signal.
- Record main-process CPU stacks and per-handle read sources when sustained thresholds are exceeded.
- Avoid registering a hidden avatar overlay as a full app-server consumer while it is not presented, or filter lifecycle/turn events for unhydrated background tasks.
- Investigate the primary renderer's ResizeObserver warning burst around 14:45–14:52.
- Reconcile completed subagent lifecycle state so spawn edges do not remain open and renderers do not receive events for missing local conversation state.
All user-identifying filesystem prefixes and prompt/title content were intentionally redacted.
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I can reproduce the same persistent
ChatGPT.exeprocess-read runaway on Windows 11 ARM64, with substantially more ETW detail. This looks like the same bug family rather than a separate issue.Environment
OpenAI.Codex_26.810.6296.0_arm64__2p2nqsd0c76g0Codex 151.0.7922.137ChatGPT.exe(no--type=switch)Process-level measurements during the runaway
Over ~90 minutes on one affected process:
ChatGPT.exechildren did not show corresponding I/O; the anomaly was in the Electron main processSo on this machine the ~1 GB/s figure is also not SSD throughput - it is cached/process logical reads serviced from memory.
ETW fingerprint
A 45-second
Microsoft-Windows-Kernel-Filetrace taken while the storm was active captured:That strongly fingerprints Node async filesystem reads saturating the default 4-thread libuv threadpool: 4 worker threads plus 512 KiB read chunks. I am deliberately not naming the offending file yet - the hot handles predated the first ETW trace, so the trace had kernel object pointers but no resolvable path names. A later trace resolved names but the runaway did not reproduce in that window.
This also rules out my earlier local SQLite hypothesis: 524,288-byte reads are inconsistent with SQLite page reads (<=64 KiB).
Lifecycle
The important behavior matches this issue closely:
Separate but possibly related filesystem churn
Even when the full read storm was absent, a 300-second ETW capture showed persistent background filesystem churn from the app:
I am treating this as a separate confirmed defect for now. It may feed the read storm, but I do not have proof of causality yet.
Current attribution gap
The remaining decisive experiment is to start ETW before app launch, then run a substantial session until the storm reproduces, so the
Createevents map the hot file object(s) to actual paths. I do not want to overstate the filename or higher-level caller until that capture succeeds.This ARM64 case adds a second Windows architecture and a very similar process-read/page-fault signature to the one reported here.
Closing as a duplicate of #38518, which tracks the same persistent Electron main-process logical-read/CPU loop, system-wide Windows stutter, and restart workaround. The diagnostics and independent ARM64 corroboration here remain useful supporting evidence.