[Windows Desktop 26.803.5235.0] Long-running session retains ~2.35 GB, mostly in two ChatGPT.exe renderer processes

Open 💬 2 comments Opened Aug 10, 2026 by WeipengMO
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using (From “About Codex” dialog)?

OpenAI.Codex 26.803.5235.0 (Microsoft Store/MSIX)

What subscription do you have?

Not disclosed; this appears unrelated to subscription tier.

What platform is your computer?

  • Windows 11 Pro Insider Preview, x64
  • OS build 26220
  • 32 GB physical RAM

What issue are you seeing?

After a long-running Codex Desktop session (approximately nine hours), the complete desktop process tree retained about 2.35 GB of private memory across 19 processes.

The allocation was concentrated in the desktop host/renderer processes rather than in the Codex app-server or a large MCP/helper process fan-out:

| Process group | Process count | Approx. private memory |
| --- | ---: | ---: |
| Desktop host/renderers (ChatGPT.exe) | 10 | 2.05 GB |
| Codex app-server and descendants | 7 | 255 MB |
| Other small active tool helpers in the same tree | 2 | < 10 MB |
| Complete tree | 19 | 2.32–2.36 GB |

The two largest desktop host/renderer processes retained approximately:

  • 917 MB private memory / 829 MB working set
  • 489 MB private memory / 456 MB working set

By comparison, the codex.exe app-server itself retained about 96 MB private memory. Only two node_repl.exe helpers were present (about 3 MB private memory each), and there was no large node.exe, git.exe, taskkill.exe, or conhost.exe accumulation.

A 15-second sample taken during ordinary active use remained nearly flat:

| Time offset | Complete-tree private memory | Working set |
| --- | ---: | ---: |
| 0 s | 2359.7 MB | 2319.7 MB |
| 5 s | 2340.3 MB | 2335.8 MB |
| 10 s | 2347.2 MB | 2342.3 MB |
| 15 s | 2351.8 MB | 2342.2 MB |

This sample does not show an actively runaway leak. The concern is the high retained renderer baseline after extended use and the absence of a way to identify or unload the renderer state responsible for it.

This appears different from #37672, where the same app version starts hundreds of Node/code-mode helpers and consumes roughly 10–13 GB. The helper fan-out from that issue is not present here. It may be closer to the renderer retention/spike patterns in #34305 and the long-thread renderer-state behavior in #21134.

What steps can reproduce the bug?

  1. Launch Codex Desktop on Windows.
  2. Use local Codex tasks normally for several hours, including shell/tool calls and switching between tasks.
  3. Without restarting the app, enumerate the complete process tree rooted at the desktop host.
  4. Sum PrivateMemorySize64 and WorkingSet64.
  5. Observe that approximately 2 GB is retained by the ChatGPT.exe host/renderer group, while the Codex app-server and helper tree remain comparatively small.

I have not yet performed a clean-restart A/B baseline because restarting would interrupt the active diagnostic session.

What is the expected behavior?

  • Inactive task/renderer state should be compacted or unloaded after extended use.
  • Renderer memory should return to a bounded baseline when task views are no longer active.
  • The app should expose enough diagnostics to map a high-memory renderer to its role or owning task without requiring access to private conversation data.
  • A typical long-running session should not retain multiple renderer processes approaching 0.5–1 GB each unless that memory is actively required.

Additional information

Privacy precautions used for this report:

  • No command lines were collected.
  • No user name, host name, workspace/repository path, conversation ID, prompt, tool output, account identifier, or log content is included.
  • No raw application logs, SQLite databases, session files, or memory dumps are attached.
  • Process IDs were intentionally omitted because they add no reproduction value.

The measurements were collected with read-only Windows process APIs using only process name, parent/child relationship, working set, private bytes, thread count, start time, OS build, total RAM, and package version.

View original on GitHub ↗

2 Comments

github-actions[bot] contributor · 18 days ago

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

  • #36561

Powered by Codex Action

WeipengMO · 18 days ago

I reviewed #36561. It is clearly related to renderer/state memory behavior in long-running Windows Desktop sessions, but the currently measured process profile is materially different, so I cannot confirm that this is an exact duplicate yet.

| | #36561 | This issue (#37811) |
| --- | --- | --- |
| Renderer behavior | Rapid growth from ~381 MB to ~2.9 GB within about two minutes, followed by renderer replacement/soft restart | Two large desktop host/renderer processes at ~917 MB and ~489 MB; no renderer replacement observed |
| Short-window trend | Explosive growth | Complete-tree private memory remained approximately 2.34–2.36 GB across a 15-second sample |
| Codex backend | Approximately 7.3–8.5 GB | Approximately 255 MB for the app-server and descendants; codex.exe itself about 96 MB |
| Workload/history | Multiple very large persistent histories; local session collection ~15.7 GB | Normal multi-task use over approximately nine hours; transcript sizes were intentionally not inspected for privacy |
| Failure symptom | Repeated soft restarts | High retained renderer baseline without a crash or soft restart |

The two reports may share an underlying renderer/state-retention mechanism, and #36561 is a useful cross-reference. However, #37811 documents a lower-severity but different state: substantial renderer memory remains resident and stable while the backend and helper tree stay small, rather than an explosive renderer/backend leak followed by recovery.

I suggest keeping this issue open unless maintainers confirm that the stable retained baseline and the rapid-growth/soft-restart case have the same root cause. A clean-restart A/B baseline and a longer memory trace would help establish that relationship.