github / github/copilot-cli

Copilot CLI crashes with JavaScript heap out of memory when resuming a long-standing session

未关闭
#4,664 8 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

area:context-memory area:sessions
主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

描述

Describe the bug

Copilot CLI crashes with a fatal Node.js/V8 JavaScript heap out of memory error when attempting to resume a long-standing/large session.

The failure occurs while loading/resuming the old session, before I can continue working in the session.

The Node.js process reaches approximately 4.1 GB of heap usage, performs repeated garbage collection / mark-compact cycles, and then aborts:

Scavenge (interleaved) 4062.4 (4097.2) -> 4061.6 (4097.5) MB
Mark-Compact 4062.4 (4098.2) -> 4061.5 (4097.5) MB

FATAL ERROR: Ineffective mark-compacts near heap limit
Allocation failed - JavaScript heap out of memory

Affected version

1.0.81

Steps to reproduce the behavior
  1. Have a long-standing Copilot CLI session with a substantial conversation history and tool usage.
  2. Exit Copilot CLI.
  3. At a later point, attempt to resume that session using the session resume functionality.
  4. Copilot CLI starts loading the old session.
  5. Memory usage grows to approximately 4 GB.
  6. Node.js garbage collection becomes increasingly expensive.
  7. Copilot CLI terminates with a fatal heap OOM.

The problem appears to correlate strongly with the size/age of the session. Newer/smaller sessions do not exhibit the problem.

Actual behavior

Copilot CLI crashes:

[1511802:0x125f9000] 10626721 ms: Scavenge (interleaved) 4062.4 (4097.2) -> 4061.6 (4097.5) MB, pooled: 0 MB, 3.54 / 0.00 ms
[1511802:0x125f9000] 10629420 ms: Mark-Compact 4062.4 (4098.2) -> 4061.5 (4097.5) MB, pooled: 0 MB, 2694.82 / 0.00 ms

FATAL ERROR: Ineffective mark-compacts near heap limit
Allocation failed - JavaScript heap out of memory

Writing Node.js report to file:
report.20260830.021306.1511802.0.001.json

Node.js report completed
Aborted (core dumped)

The session cannot be resumed, effectively making the accumulated context inaccessible through the normal resume mechanism.

Expected behavior

Copilot CLI should be able to resume a previously saved session without exhausting the Node.js heap.

If a session has become too large to load in its entirety, Copilot CLI should ideally:

Detect the excessive session size before attempting to fully load it.
Compact/summarize the session before restoring it, if possible.
Provide a mechanism to resume from a recent checkpoint.
Gracefully report that the session is too large rather than crashing the entire CLI process.
Preserve the ability to recover/use the historical session.

Additional context

Copilot CLI version: 1.0.81
OS: Linux
Model: Claude Opus 5 (High)
Repository: private/local repository
Session: long-standing session with substantial history

The crash occurs at approximately 4 GB of V8 heap usage.

The garbage collector is unable to reclaim meaningful memory:

4062.4 MB -> 4061.6 MB
4062.4 MB -> 4061.5 MB

The second Mark-Compact operation takes approximately 2.7 seconds, after which V8 reports that further compaction is ineffective.

This suggests that a significant amount of session-related data remains strongly referenced while the old session is being restored.

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

首先,使用一个大型且长期存在的会话,通过 Copilot CLI 的会话恢复功能重现该故障,然后跟踪已保存的会话是如何加载和恢复的。Issue 没有指明文件或测试,因此首先定位会话加载入口点。完成的标准是大型会话不再耗尽 Node.js 堆,并且超大​​会话能够正常失败或仍可恢复。

由索引模型根据 Issue 内容生成。

评估

技术栈
node.js
领域
cli, performance
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
活跃
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。