Main-process CPU burn ramps to ~80% of a core while idle, degrading UI responsiveness

Resolved 💬 4 comments Opened Aug 7, 2026 by anu-june Closed Aug 15, 2026
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

BUG REPORT: Main-process CPU burn ramps to ~80% of a core while idle

App: OpenAI.Codex (ChatGPT desktop, MSIX) v26.803.5235.0
Severity: High - app becomes progressively unusable for navigation within ~20 min of launch

SUMMARY
-------

The Electron/Chromium main process contains a single thread that busy-loops while the
app is completely idle. The burn is not constant: it ramps monotonically from ~24% to
~80% of one CPU core over roughly 20-35 minutes after launch, then plateaus near 80%
and stays there indefinitely (measured at 80.7% after 23.5 hours of uptime).

Because the saturated thread is the main process thread that services UI and IPC, all
user interaction - especially switching between threads/conversations - becomes visibly
laggy. Streamed model responses remain fast, since they arrive over a socket that does
not contend for that thread. This produces the characteristic symptom: the app feels
heavy and slow to click through, but responses are instant once a click registers.

ENVIRONMENT
-----------

OS: Microsoft Windows 11 Enterprise, Build 26200
CPU: Intel Core i7-10610U @ 1.80GHz (4 cores / 8 threads)
RAM: 31.8 GB
GPU: Intel UHD Graphics, driver 31.0.101.2135
App version: OpenAI.Codex 26.803.5235.0
(auto-updated same day; issue also present on prior 26.730.8199.0)
Install: C:\Program Files\WindowsApps\OpenAI.Codex_26.803.5235.0_x64__2p2nqsd0c76g0

EVIDENCE 1: CPU BURN RAMPS OVER TIME, THEN PLATEAUS
---------------------------------------------------

All samples taken with the app idle - no prompt running, no typing, no streaming.
Each measurement is a CPU-time delta over a 30-90 second window.

Time since app launch Idle CPU burn (% of one core)
--------------------- -----------------------------
~1 min 24.2%
~5 min 33.5%
~20 min 70.8%
~35 min 77.5%
~53 min 76.6%
~80 min 84.3%
23.5 hours 80.7%

The curve increases monotonically and is asymptotic to roughly 78-84%, i.e. saturation
of the single thread performing the work.

EVIDENCE 2: A SINGLE THREAD ACCOUNTS FOR ESSENTIALLY ALL OF IT
--------------------------------------------------------------

Main process, 56 threads total. One thread is permanently in Running state; all others
are idle in Wait:

Id CPU_s ThreadState
----- ----- -----------
22728 142.9 Running <-- hot thread
2980 7.6 Wait
19500 5.4 Wait
2528 4.6 Wait
... ... Wait

Isolated measurement of that thread over a 40 second window:

Thread 22728 burn : 59.2% of one core
Whole process : 77.5% of one core
=> that thread is 76% of ALL process CPU

The same thread ID persists for the life of the process and its accumulated CPU time
grows continuously: 142.9 s at ~35 min uptime, rising to 567.8 s at ~53 min uptime.

EVIDENCE 3: RESOURCE HANDLES GROW ALONGSIDE CPU
------------------------------------------------

Over ~28 minutes of idle time in the main process:

Handles: 1634 -> 1759
Threads: 56 -> 57
Total app RAM: grew to 2.84 GB across 9 processes, including a +310 MB gain in a
single 45-second idle window while the window was minimized

The combination of monotonically growing CPU, growing handle count, and growing memory
in an idle process is consistent with recurring callbacks / timers / listeners being
registered but never disposed, so the volume of periodic work compounds over the
session. (Stated as consistent with the evidence, not as a confirmed root cause.)

WHAT WAS RULED OUT
------------------

Hypothesis Test performed Result
-------------------------- ------------------------------------ --------------------------------
Accumulated cache/profile Cleared 121.7 MB (caches, stale backup Burn returned to ~71% within
cruft profile, 45 MB logs) + full OS reboot 20 min of relaunch

System resource exhaustion Fresh reboot, 15.6 GB RAM free, No change to ramp behaviour
8 logical cores

Long conversation / heavy Hot thread is in the MAIN process, Renderer processes are idle
DOM not any renderer process

Render or animation loop Window minimized vs visible, 45s each Identical: 77.5% both ways

GPU / hardware acceleration gpu-process inspected separately GPU process idle; burn is in main

Filesystem watching / IO IO counter deltas on main process Only 34 reads/s, 18 writes/s
storm - negligible

Stale version Checked installed package version Already on latest (26.803.5235.0)

Process inventory at time of measurement (all from ChatGPT.exe):

PID Type
----- ----------------
19676 MAIN <-- hot thread lives here
5388 gpu-process
9896 crashpad-handler
3128 renderer
12144 renderer
10044 renderer
7728 utility
8220 utility
8072 utility

STEPS TO REPRODUCE
------------------

  1. Launch the ChatGPT desktop app on Windows 11.
  2. Leave it completely idle - do not send a prompt.
  3. Sample the CPU time of the MAIN ChatGPT.exe process (the one that is not

--type=renderer / --type=gpu-process / --type=utility) over a 30s window,
at 1 min, 5 min, 20 min and 40 min after launch.

  1. Observe CPU consumption climbing from ~25% to ~80% of one core with no user activity.
  2. Optionally enumerate threads of that process and observe one thread permanently in

Running state consuming ~76% of the process's total CPU.

PowerShell used for sampling:

$p = Get-Process ChatGPT | Sort-Object WorkingSet64 -Descending | Select-Object -First 1
$a = $p.CPU
Start-Sleep 45
$b = (Get-Process -Id $p.Id).CPU
"Idle CPU burn: {0}% of one core" -f [math]::Round(($b-$a)/45*100,1)

# thread-level
(Get-Process -Id $p.Id).Threads |
Sort-Object {$_.TotalProcessorTime} -Descending |
Select-Object -First 5 Id,
@{n='CPU_s';e={[math]::Round($_.TotalProcessorTime.TotalSeconds,1)}},
ThreadState

NOTE FOR PROFILING / TRIAGE
---------------------------

A standard DevTools Performance panel recording will NOT surface this, because that
profiles a renderer target. The hot thread is in the browser/main process; all three
renderer processes are idle during the burn. A renderer-level profile is expected to
come back clean and should not be treated as evidence that the issue is absent.

To capture it, use a browser-wide trace that includes the browser process - either
chrome://tracing, or CDP Tracing.start issued against the browser-level endpoint rather
than a page target. Useful categories would include toplevel, sequence_manager, base
and scheduler, which should reveal the identity and repetition rate of the recurring
task.

Alternatively, an ETW/WPR CPU-sampling capture with stacks against the main process
would give native stack attribution for the hot thread directly.

EXPECTED VS ACTUAL
------------------

Expected: An idle desktop client should consume near-zero CPU, and should not consume
more CPU the longer it is left open.

Actual: Idle CPU consumption grows monotonically to ~80% of a core and remains there
for the lifetime of the process. UI navigation latency degrades in step with it.

IMPACT
------

  • Thread/conversation switching becomes progressively laggy within ~20 minutes of launch.
  • On a 4-core laptop this is ~20% of total CPU capacity burned continuously while idle,

with corresponding battery and thermal cost.

  • The only effective mitigation found is to fully quit the app from the tray and relaunch,

which restores responsiveness for roughly 10-15 minutes before degrading again.
Closing the window is not sufficient; the process persists and continues to burn CPU.

  • Minimizing the window does NOT reduce the burn.

View original on GitHub ↗

4 Comments

github-actions[bot] contributor · 21 days ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #37372

Powered by Codex Action

olegKusov · 19 days ago

Having same issue. ChatGPT desktop app makes my Macbook M2 unusable now!

hwtsky · 13 days ago

Additional Windows reproduction (main-process hot thread)

I am seeing the same broad main-process CPU-burn pattern on another Windows machine, although I have not yet confirmed the post-relaunch ramp curve, so this should be treated as supporting evidence rather than proof of an identical root cause.

Environment

  • OS: Windows 10 Home 22H2, build 19045
  • CPU: Intel Core i9-10900K, 20 logical processors
  • RAM: 31.9 GB
  • App: OpenAI.Codex / ChatGPT desktop MSIX 26.810.4967.0

Observed

  • After leaving the app idle for 60–90 seconds, CPU usage remained elevated.
  • In a 20-second sample of the main ChatGPT.exe process, CPU time increased by 23.52 CPU-seconds:
  • whole process: 117.6% of one logical core
  • Task Manager's 20-processor-normalized equivalent: 5.88% total CPU
  • The hottest thread increased by 16.50 CPU-seconds in the same window:
  • hottest thread: 82.5% of one logical core
  • contribution to whole-process CPU: 70.2%
  • Remaining threads together accounted for about 35.1% of one logical core.
  • Renderer, Node/app-server, WMI, and repeated taskkill activity did not account for the main-process burn in separate checks.
  • Cleaning application caches did not eliminate the sustained CPU usage.

This matches the issue's structural symptom: a persistent hot thread in the Electron/Chromium main process, with other processes mostly idle. The absolute numbers should not be compared directly: this report's 82.5% is the hottest thread, while the issue's ~78–84% plateau is the whole-process single-core equivalent.

Current limitation

This sample was taken after the app had already been running for roughly 79 minutes. A clean tray-exit/relaunch series at T+1, T+5, T+20, and T+40 minutes is still needed to verify the issue's distinctive time-dependent ramp. No specific timer/listener/callback leak has been confirmed locally.

anu-june · 12 days ago

Resolved as of 26.810.6296.0

Confirmed fixed on my original repro machine (Windows 11 Enterprise 26200,
i7-10610U, Intel UHD).

| | Aug 7 (26.803.5235.0) | Aug 13 (26.803.10989.0) | Aug 15 (26.810.6296.0) |
|---|---|---|---|
| Idle CPU (main proc) | 77.5–84.3% of one core | 80.0% | 0.1% |
| Threads in Running | 1 | 1 | 0 |
| Total threads | 56 | 55 | 21 |
| Handles | 1634 (climbing) | 1783 | 355 (flat over 90s) |
| Total app RAM | 2.84 GB | 2.40 GB | 1.50 GB |

Measured at 4.5 hours uptime, well past the point where the burn previously
plateaued near 80%. The distinctive ramp is gone — no hot thread, handle count
flat, and thread count down by a factor of ~2.6, which suggests the leaked
periodic work is no longer being scheduled at all.

Given @hwtsky reproduced this on 26.810.4967.0 on Aug 14, the fix appears to
have landed between 26.810.4967.0 and 26.810.6296.0.

Closing from my side. Thanks to everyone who added reproductions across
Windows 10/11, macOS Intel and Apple Silicon — the cross-platform coverage is
probably what made the shared-layer cause identifiable.