会话容量、队列与期限
按工作区、daemon、连接和 prompt 分层限制负载,并配置超时。
注册工作区数量、live 会话数量、SSE 客户端和排队 prompt 是不同层的容量。提高其中一项不会自动提高其他项,也不表示主机能安全承载对应并发。
负载参数
| 参数 | 默认 | 作用 |
|---|---|---|
| --max-sessions | 32 | 每工作区 fresh live session 上限;0 关闭 |
| --max-total-sessions | 通常 800 | daemon 全部工作区的 fresh session 总上限;0 关闭 |
| --max-pending-prompts-per-session | 5 | 每会话已接纳但未结束的 prompt,包含正在执行者;0 关闭 |
| --max-connections | 256 | listener 原始 TCP 连接数 |
| --event-ring-size | 8000 | 每会话 SSE 重连回放事件数 |
已有 live session 的附着不消耗 fresh session 名额,恢复、branch/fork 创建则消耗。会话满时返回 503 session_limit_exceeded,总量限制带 scope: total;prompt 满时返回 prompt_queue_full,均有 Retry-After: 5。
总会话默认值取决于注册容量:高于 25 时固定为 800,包括默认 256 容量下仅启动一个工作区的情况;容量不超过 25 时,一个启动/恢复工作区默认不限总量,多个则按每工作区上限和数量推导。运行中增减注册不会重新计算总量。
每会话还有默认 64 个 SSE 订阅者、每订阅者默认 256 帧队列。订阅 maxQueued 可在 16–2048 调整,不能用它改变整个 SSE replay ring。大量客户端的内存成本取决于这些层共同作用。
初始化与恢复
--initialize-timeout-ms 默认 10000,适用于 ACP initialize、newSession、工作区状态轮询等请求。--session-restore-timeout-ms 默认 60000;若显式初始化预算更长,未显式设置的恢复预算提升到相同值。
两项必须为正整数且不超过 2147483647,恢复的 0 也非法。超过 JavaScript 定时器上限不会被视为“更长等待”,而是在启动时拒绝。恢复失败的处理见历史与恢复。
三种交互期限
| 参数 | 环境变量 | 默认与结果 |
|---|---|---|
| --prompt-deadline-ms | QWEN_SERVE_PROMPT_DEADLINE_MS | 默认关闭;到期中止 prompt,返回 504 prompt_deadline_exceeded |
| --writer-idle-timeout-ms | QWEN_SERVE_WRITER_IDLE_TIMEOUT_MS | 默认关闭;SSE 无成功刷出超过期限,client_evicted 后关闭 |
| --permission-response-timeout-ms | 无 | 默认 0 无限等待,正整数同时约束普通权限和 ask_user_question |
prompt 请求体 deadlineMs 只能缩短已有服务端期限,不能延长。prompt/writer 值必须为正整数毫秒,0 非法;permission-response 允许 0。前两项的显式 ServeOptions 优先于环境。
SSE 约每 15 秒发心跳,writer 期限应明显长于此间隔;小于 15000 会驱逐正常但空闲的连接。它检查成功 flush,不是最近收到业务事件的时间,适合处理 NAT 静默断开后长时间残留的 socket。
依赖这些行为前检查 prompt_absolute_deadline、writer_idle_timeout。HTTP rate limit 也可显式启用并通过 rate_limit capability 确认;不要仅凭版本号推断服务端已开启限流。内存和回放分配另见内存预算。