Windows desktop app: idle warm sessions never release MCP child processes (1 to 1,182 children / 33 GB RSS in one day, ends in GPU process crash)

Status Open
Reported on v2.1.234
Maintainer reply None cached
Activity 1 comment · opened Sep 2, 2026

Environment

  • Claude Desktop for Windows 1.40609.1 (Microsoft Store / MSIX install)
  • Bundled Claude Code: 2.1.255
  • Windows 11 Pro, build 10.0.26200, x64, 28 GB RAM
  • ~10 MCP servers configured globally (8 Supabase MCP servers + others); sessions report toolCount=92

Summary

In the desktop app, every local session that gets warmed spawns a claude.exe plus what appears to be a full copy of every configured MCP server. When a session idles out, WarmLifecycle logs Idle timeout reached, disconnecting ..., but the child processes are never reaped. Over a normal working day the process tree grows monotonically (roughly +100 children per hour with my MCP config) until the machine runs out of memory. The Electron GPU process is then the first thing to die, and the whole app exits with it.

Evidence

All from %LOCALAPPDATA%\Claude\Logs\main.log, single app run on 2026-09-02 (started 08:49, died 20:30). The app's own [process-memory] telemetry, sampled roughly hourly:

| time | children | children RSS | system free |
|-------|----------|--------------|-------------|
| 08:49 | 1 | 38 MB | 17.7 GB |
| 09:49 | 138 | 4.6 GB | 15.8 GB |
| 10:49 | 226 | 7.1 GB | 14.1 GB |
| 11:48 | 369 | 10.6 GB | 13.3 GB |
| 12:48 | 425 | 12.2 GB | 11.2 GB |
| 14:48 | 534 | 14.5 GB | 10.2 GB |
| 15:48 | 753 | 21.3 GB | 7.4 GB |
| 18:48 | 1014 | 28.4 GB | 6.3 GB |
| 20:30 | 1182 | 32.9 GB | 4.5 GB |

A raw sample line:

2026-09-02 19:44:11 [info] [process-memory] trigger=interval tree_rss_sum=31631MB tree_footprint_sum=5355MB electron(20)=3807MB children(1060)=27825MB top=[electron_renderer:25048:889MB electron_main:8096:580MB child:57128:381MB child:49160:376MB child:30832:332MB] sys_free=6240MB/28524MB sys_free_raw=6240MB

Idle disconnects fire but the child count never decreases (it is monotonic across the entire 12-hour log, e.g. still 1182 immediately after these):

2026-09-02 20:30:13 [info] [WarmLifecycle:session] Starting idle timeout for local_81866749-...: 900s
2026-09-02 20:30:15 [info] [WarmLifecycle:session] Idle timeout reached, disconnecting local_d3800dbc-...

How it ends (last log line of the run; the entire app terminated here):

2026-09-02 20:30:22 [info] GPU process gone: {
  type: 'GPU',
  reason: 'crashed',
  exitCode: 101457950,
  serviceName: 'GPU'
}

For scale of the per-session cost: after a clean restart, warming ~5 restored sessions produced 50 children (~2 GB) within 90 seconds, i.e. ~10 processes per warm session with this MCP config.

Windows Error Reporting also raised a RADAR_PRE_LEAK_64 (memory-leak heuristic) against claude.exe 2.1.234.0 on 2026-08-19.

Expected behaviour

Disconnecting an idle warm session should terminate (or allow reaping of) its claude.exe and MCP server children; at minimum the process tree should be capped so a day-long run cannot exhaust system memory.

Notes

  • A second GPU-process crash with the identical exit code (101457950) happened 2 minutes after an OS reboot with 17 GB free, seconds after the restored browser preview pane logged [PreviewContext] Blocked subresource to private-resolving host { resourceType: 'xhr' }. Reported separately via in-app support; mentioned here only in case it shares the session-restore path.
  • Possibly related in symptom (non-reaped children on Windows) but different mechanism: #77593.
  • Happy to share the full main.log privately on request.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗