`--server --stdio` never releases a session's extension-host processes; they accumulate at 4 per session until the server exits
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Shell
- Sterne
- 11.2k
- Forks
- 1.9k
- Ø Merge
- 14 Std. 16 Min.
- Gemergte PRs (30 T.)
- 6
Beschreibung
[Filed by Copilot on behalf of @bghgary]
Summary
When copilot.exe runs as a long-lived server (--server --stdio, as the Windows desktop app hosts it), each session it creates spawns four extension-host child processes, and none are terminated when the session ends. They are released only when the whole server process exits.
Over ~3 hours of repeated short-lived sessions this reached 192 extension-host processes holding ~13 GB of working set on an otherwise idle machine.
Expected vs actual
- Expected: a session's extension hosts exit when that session ends.
- Actual: they persist for the lifetime of the server process. The count only ever grows.
Evidence
Extension hosts are copilot.exe processes whose command line ends in preloads\extension_bootstrap.mjs. Their command lines are byte-identical to one another, so they carry no session identity.
Two server processes on the same machine, measured together:
| Server | Sessions | Hosts |
|---|---|---|
| Hosting 3 long-lived interactive sessions | 3 | 12, stable for hours |
| Creating repeated short-lived sessions | 44 created since start | 180 |
The first is exactly 4 per live session and never grew. The second matches 4 per session to within one session, and not one host from a completed session had exited — sessions reporting status completed leaked identically to any other.
A third control: a one-shot invocation (copilot -p "...") leaks zero. Host count before and after is identical, so the defect appears only in server mode.
Each host is ~70 MB of working set and effectively idle (~2 s of CPU accumulated over 3 hours), so this is a pure resource leak rather than runaway work.
Reproduction
- Run the Windows desktop app, which hosts
copilot.exe --server --stdio. - Have it create repeated short-lived sessions — scheduled workflows do this on a timer.
- Count
copilot.exeprocesses whose command line containsextension_bootstrap.
The count rises by 4 per session and never falls. Restarting the app is the only thing that clears them.
Impact
Host count grew at ~48/hour, reaching 192 processes and ~13 GB before intervention. Memory pressure was the visible symptom.
Workaround
Kill surplus hosts on a timer, keeping the newest N per server process — an in-flight session's hosts are always the newest, so they are never candidates. This is a hack; there is no supported way to map a host back to its session.
Environment
- Copilot CLI 1.0.79-9
- GitHub Copilot desktop app 1.1.8
- Windows 11 build 26310
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem Einstiegspunkt --server --stdio und dem Sitzungslebenszyklus, der preloads\\extension_bootstrap.mjs startet; reproduziere das Leck, indem du wiederholt kurzlebige Sitzungen erstellst und die passenden copilot.exe-Prozesse zählst. Als erfüllt gilt die Aufgabe, wenn die vier Extension-Hosts jeder Sitzung beim Ende der Sitzung beendet werden, während langlebige Sitzungen ihre Hosts behalten und One-Shot-Aufrufe weiterhin kein Leck verursachen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript
- Bereich
- backend, cli
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100