Skip to content

[Bug] 大型会话停止后 Web 页面持续高 CPU #3510

Description

@bnmgh1

你运行的 Kimi Code 版本是?

0.40.1

你使用的是哪个开放平台/订阅?

未登录,本地 Kimi Code Web UI。

你使用的是哪个模型?

gpt-5.6-luna max(该问题看起来与模型无关)

你的电脑平台是?

Darwin 24.5.0 arm64 arm

你遇到了什么问题?

打开一个包含大量历史工具调用输出的会话后,Web 页面持续占用较高 CPU。即使点击停止、页面显示“已手动终止”,CPU 占用仍不会恢复正常;其他较小会话页面正常。

对问题页面进行运行时检查后得到:

  • DOM 节点约 136,000 个,页面文本约 5.77 MB。
  • 页面包含约 94 个 activity run、693 条 tool line、6,692 条搜索匹配结果;历史工具输出被全量挂载。
  • 运行中测得 5 秒仅产生 134 帧,平均帧间隔约 37.4 ms(约 27 FPS),并出现 52 ms long task。
  • 执行 document.getAnimations().forEach(a => a.pause()) 后,同一页面 5 秒产生 597 帧,平均帧间隔约 8.38 ms(约 119 FPS)。DOM 未减少。
  • 手动停止后已不再观察到该会话的 task API 轮询,但页面仍保留 13 个无限动画:7 个历史 .kw-dot--running、3 个 .ui-spinner、3 个头像动画。
  • 页面加载期间还观察到 108 个 .activity-runkimi-card-in 动画。
  • 控制台存在 WASM MIME 报错,但正常会话也有同样报错,因此不是本次高 CPU 的主要原因。

看起来是大型会话全量 DOM 挂载与未清理的运行态动画叠加导致的前端持续重绘/合成开销。停止任务只终止后端执行,没有清理历史卡片中的运行动画状态。

复现步骤?

  1. 创建或打开一个包含大量工具调用、搜索结果和长输出的会话。
  2. 在 Kimi Code Web 页面打开该会话。
  3. 观察浏览器页面 CPU 占用明显升高。
  4. 点击停止,确认页面出现“已手动终止”。
  5. 再次观察 CPU,占用仍持续。
  6. 在 DevTools Console 执行:
document.querySelectorAll('*').length
document.getAnimations().map(a => ({
  state: a.playState,
  target: a.effect?.target?.className,
  timing: a.effect?.getTiming?.()
}))
  1. 再执行以下临时规避代码,CPU/帧率会明显恢复:
document.getAnimations().forEach(a => a.pause())

复现会话 ID:session_8a40b5e6-7cef-4e40-8b09-8320582c21e2(本地实例)。

期望的行为是什么?

任务停止后应清除所有历史运行态动画;大型会话中的历史消息和工具输出应采用虚拟列表、按需挂载或 content-visibility,不可让视口外的十万级 DOM 持续参与渲染。

轮询与动画状态更新也应与整棵会话树隔离;页面不可见或任务结束后应停止相关动画和轮询。

补充信息

作为对照,普通会话约 9,971 个 DOM 节点、38 万字符,5 秒约 601 帧且无 long task。问题会话的节点数约为其 13.6 倍。

当前临时规避方式是打开 DevTools Console 执行:

document.getAnimations().forEach(a => a.pause())

刷新页面后需要重新执行。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions