`--server --stdio` never releases a session's extension-host processes; they accumulate at 4 per session until the server exits
Personne n'a encore pris cette issue.
- Langage dominant
- Shell
- Étoiles
- 11.2k
- Forks
- 1.9k
- Merge moyen
- 14 h 16 min
- PR mergées (30 j)
- 6
Description
[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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le point d’entrée --server --stdio et le cycle de vie de la session qui lance preloads\\extension_bootstrap.mjs ; reproduisez la fuite en créant de manière répétée des sessions de courte durée et en comptant les processus copilot.exe correspondants. Le travail est terminé lorsque les quatre hôtes d’extensions de chaque session se terminent à la fin de la session, tandis que les sessions de longue durée conservent leurs hôtes et que les invocations ponctuelles ne provoquent toujours aucune fuite.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript
- Domaine
- backend, cli
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100