Repository navigation
[Bug] 大会话下拖动滚动条 / 分栏手柄,浏览器主进程单线程 100% 自旋,页面长时间失去响应 #7131
gif156359098
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
当一个大会话(50 轮以上)正处于工作中(agent 在跑、最好同时有子代理在工作)、且它是当前选中的会话时,以下两种鼠标拖拽操作会让浏览器主进程(browser process)单线程 100% 自旋(该线程
Running、优先级AboveNormal,其余线程全部Wait),页面随即完全失去响应,持续数十秒到数分钟,直到拖拽停止才自行恢复:同一页面在三个不同的 Chromium 宿主上均可复现;DSH 服务端进程全程正常(其它客户端可继续交互),只有当前这个浏览器页面卡死。
Reproduction
前置条件(关键):
触发步骤(两种都稳定复现):
触发稳定性说明:
Current behavior
页面失去响应时,浏览器主进程的线程级读数:
tid=901294.9%RunningAboveNormal,其余 58/59 全 0%tid=2508894.1%RunningAboveNormal,其余 73/74 全 0%tid=1740097.7%RunningAboveNormal,其余 60/61 全 0%共同特征:单线程吃满一个核、优先级 AboveNormal、其余线程全部 Wait、句柄数不增长。renderer 进程只是正常重渲染(实测 27%~77%),不是它卡住;DSH 的 node 服务进程 CPU 平稳。
页面无响应期间,同一 DSH 服务下的其它浏览器客户端完全正常;拖拽负载停止后自行恢复。
Expected behavior
拖动子代理浮窗的列表滚动条、拖动分栏尺寸手柄,应当只引起页面按帧重绘,不应使浏览器主进程进入持续忙循环,更不应导致页面长时间(数十秒~数分钟)无法交互。
Environment
0.1.6-alpha.2(@deepseek-ai/dsh,pnpm 全局安装)补充分析(供参考,不影响复现)
1. 为什么必须「会话工作中」才触发
会话工作时,页面处于持续流式更新状态:消息增量、子代理状态、列表投影都在不停重建。此时拖拽产生的 100+ Hz
pointermove与这些更新叠加,才会把主进程推入忙循环;会话空闲时同样拖拽,负载不足以触发。子代理在跑会进一步放大——浮窗里的子代理列表需要反复重建(对应 trace 中的indexSubagentDescendants)。2. 前端拖拽 helper 没有做按帧节流
@deepseek-ai/dsh-web-frontend@0.1.6-alpha.2的dist/assets/index-8VXBH-f-.js,偏移 593246 处的拖拽 helper(压缩名Tw):要点:每个
pointermove都直接、同步执行i.move(f),没有任何requestAnimationFrame或时间戳节流;监听还挂在window上。整个 index bundle 中requestAnimationFrame仅出现 2 次,而ResizeObserver出现 12 次,节流基本没用在拖拽路径上。3. 自采 Chrome trace 的热点与操作吻合
用户自采 trace(432.9s、800,691 个事件、233,167 个 CPU 样本 / 85.8s):
4. 可能的机制
拖拽产生 100+ Hz
pointermove→ 每个事件同步执行重量级重算 → 与流式更新叠加 → renderer 侧输入处理滞后 → Chromium browser 进程的输入事件路由积压 → 主进程进入忙循环(单线程Running/AboveNormal)。这也解释了滚轮(离散事件、浏览器自带节流)为何不稳定触发、会话越大越容易触发(列表快照与子代理索引耗时随规模增长)、以及为何必须会话处于工作中。5. 建议
在拖拽 helper 中按帧合并
pointermove(每帧最多执行一次move),手感不变但负载可降一个数量级:6. 附:这不是第三方插件导致
最初怀疑是第三方插件,已通过实验排除:移除全部第三方插件(profile 只剩 4 个官方组合包)后,Chrome 上仍稳定复现;且该现象在三种不同 Chromium 宿主上表现完全一致。
All reactions