`--server --stdio` never releases a session's extension-host processes; they accumulate at 4 per session until the server exits
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Shell
- Star
- 11.2k
- Fork
- 1.9k
- Merge trung bình
- 14 giờ 16 phút
- Pull request đã merge (30 ngày)
- 6
Mô tả
[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
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với entry point --server --stdio và vòng đời phiên khởi chạy preloads\\extension_bootstrap.mjs; tái hiện rò rỉ bằng cách liên tục tạo các phiên tồn tại ngắn và đếm các tiến trình copilot.exe tương ứng. Được xem là hoàn tất khi bốn extension host của mỗi phiên thoát khi phiên kết thúc, trong khi các phiên tồn tại lâu vẫn giữ các host của chúng và các lần gọi one-shot vẫn không làm rò rỉ tiến trình nào.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- javascript
- Lĩnh vực
- backend, cli
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 48/100