Skip to content

引擎重启后偶发请求一直不返回(已有超时兜底,根因未定) #235

Description

@jinjunnn

引擎(应用后台负责跑 AI 和工具的那部分)重启之后,7 月测试时出现过一次:某个请求发出去以后一直没有回音,既不成功也不报错。当时在模型选择框里加了 10 秒超时,所以你看到的是「加载失败,可重试」而不是永远转圈。根本原因(是引擎自己卡住,还是应用复用了一条已经断掉的连接)一直没查清,而引擎重启那套机制之后又改过好几次。 不查的话,已知那一处有超时兜底;别的地方若也碰上,可能表现为某块内容一直加载不出来。

现象(2026-07-12 REQ-083 复验实锤,PR #173 评论有完整取证)

killSidecar → retrySidecar 恢复后,respawned 引擎出现过一次:无鉴权请求秒回 401(中间件活着),带鉴权 /config/providers 永不返回——捕获的请求挂起数分钟既不 resolve 也不 reject,新发 6s 超时请求 TimeoutError。复现率:6 个 kill→retry 循环中 1 现(首次撞上,其后 5 连阴),非确定性竞态。

未完成的判决实验

僵死瞬间需要用带鉴权的外部 curl(凭证经 renderer awaitInitialization() 取)打同一端点,分辨两种可能:

  • 外部 curl 也悬挂 → 引擎侧僵死(respawn 后实例初始化死锁 / 上游 sync 引入——7-10 同脚本在旧引擎 stage5 全绿,嫌疑存在但未定罪);
  • 外部 curl 正常 → renderer 连接池僵死(Chromium 复用指向已死进程的 keep-alive 套接字)。

复跑工具:bun packages/ui-mac/scripts/verify-picker-respawn.ts(stage 5/6 即 kill→retry 序列,循环跑直至复现)。

缓解现状(用户面已兜底)

PR #173 已给 picker 取数加 AbortSignal.timeout(10s):悬挂 → 超时转可重试失败 → 诚实提示 + 自动恢复,且 abort 会关闭底层连接(若是连接池僵死,这本身就接近根治)。每日 sync 增引擎冒烟步(boot→kill→reboot→probe)持续看护引擎侧。

完成定义

复现 + 判决实验定层 → 按层根治或如实记录为已缓解的已知竞态。

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

    area:runtimeServices, jobs, infrastructure, or operationstype:bugSomething is incorrect or regressed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions