Skip to content

[反馈]: [Bug] 并发请求超时触发账号切换时发生死锁 (卡在 Switch already in progress) #105

@fbvcc

Description

@fbvcc

部署平台

Docker

版本号

v1.0.1

客户端/工具

No response

请求接口

OpenAI

问题/请求描述

问题现象:
系统遇到严重的并发死锁问题。当底层代理浏览器遇到严重超时(300 秒无数据返回)时,多个并发请求会同时失败,并触发账号切换机制。
但是,账号切换动作似乎完全卡死了,导致切换状态锁(Lock)永远没有被释放。

系统表现为:日志疯狂输出 Account switch skipped: Switch already in progress.,当前账号的失败计数器一路飙升(如从 8/3 涨到 15/3),系统永远无法成功切换到下一个账号。最终导致该节点彻底瘫痪,后续所有请求都在无限排队,直到客户端主动断开连接。

原因分析:

  1. 浏览器假死:大概率是底层的无头浏览器(Proxy Browser)在长时间等待中已经彻底假死。此时触发的“销毁旧上下文/登录新账号”动作被无限期挂起。
  2. 状态机死锁:第一个失败的请求将状态改为了正在切换(Switching),但因为上述假死,这个动作永远没有抛出异常或完成,导致后续几十个请求全被 Switch already in progress 挡住。

优化建议与诉求:

  1. 为“切换账号”操作本身增加硬性超时(Hard Timeout):不能让切换动作(如重启 Browser Context)无限期 await。建议设定如 30~60 秒的切换超时,如果切不过去,直接强制 kill 掉底层浏览器进程,释放状态锁,并尝试下一个账号。
  2. 关于 300s 超时的考量:考虑到**非流式(Non-stream)**处理长上下文时确实可能需要 300s 甚至更久,不建议一刀切缩短全局超时。建议:
    • 增加底层浏览器的活性检测(Health Check),如果底层进程已经僵死,提前中断,而不是干等 300s。

3.或者是其他更好的方式改善

日志信息(可选)

[INFO] [AIStudioToAPI] - [Context#17] ❌ Request processing failed: Timeout: 300 seconds without receiving any data
[WARN] [AIStudioToAPI] - [Request] Attempt #3/3 for request #req_XXX failed: Proxy browser error: Timeout: 300 seconds without receiving any data
[ERROR] [AIStudioToAPI] - [Request] All 3 retries failed for request #req_XXX. Final error: Proxy browser error: Timeout: 300 seconds without receiving any data

[WARN] [AIStudioToAPI] - ⚠️ [Auth] Request failed - failure count: 8/3 (Current account index: 17)
[WARN] [AIStudioToAPI] - 🔴 [Auth] Failure threshold reached (8/3)! Preparing to switch account...
[INFO] [AIStudioToAPI] - 🔄 [Auth] Account switching/restarting in progress, skipping duplicate operation
[WARN] [AIStudioToAPI] - ⚠️ [Auth] Account switch skipped: Switch already in progress.

... (中间省略几十条类似的并发超时报错,都在等锁) ...

[WARN] [AIStudioToAPI] - ⚠️ [Auth] Request failed - failure count: 15/3 (Current account index: 17)
[WARN] [AIStudioToAPI] - 🔴 [Auth] Failure threshold reached (15/3)! Preparing to switch account...
[INFO] [AIStudioToAPI] - 🔄 [Auth] Account switching/restarting in progress, skipping duplicate operation
[WARN] [AIStudioToAPI] - ⚠️ [Auth] Account switch skipped: Switch already in progress.

[WARN] [AIStudioToAPI] - [Request] Client closed request connection prematurely.
[INFO] [AIStudioToAPI] - [Request] Message queue closed due to client disconnect, aborting retries.

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐛 BugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions