快速结论:Open WebUI v0.11.0 在空闲时 CPU 和 RSS 显著升高,原因是新增的定时器轮询对 chat 表执行未加索引的 JSON_EXTRACT 全表扫描。优先排查是否开启了 Timer 功能,并考虑回退到 v0.10.2 或等待官方修复。
适用环境:Docker 安装、Open WebUI v0.11.0、Ubuntu 24.04、SQLite 数据库、含历史聊天记录。
最快修复方案:暂无确认的一步修复方案。可优先尝试回退到 v0.10.2 版本,或关注后续版本是否针对 timer query 添加索引。
注意事项:回退版本会丢失 v0.11.0 的新功能;该方案仅适用于 SQLite 后端,其他数据库(如 PostgreSQL)可能不受影响。
问题场景
用户从 Open WebUI v0.10.2 升级到 v0.11.0 后,在空闲状态下(无任何用户操作)发现容器 CPU 占用从接近 0% 上升到可观水平,RSS 内存也超过 1GB(在树莓派 5 arm64 上)。通过设置 SAFE_MODE=true 和 GLOBAL_LOG_LEVEL=debug 排查,发现每秒都会执行一条使用 JSON_EXTRACT 的 timer 轮询 SQL 查询。
报错原文
DEBUG | aiosqlite.core:_connection_worker_thread:62 - executing functools.partial(<built-in method execute of sqlite3.Cursor object at 0xffff3e574dc0>, 'SELECT chat.id, chat.user_id, chat.title, chat.chat, chat.created_at, chat.updated_at, chat.share_id, chat.archived, chat.pinned, chat.meta, chat.variables, chat.folder_id, chat.tasks, chat.summary, chat.current_message_id, chat.last_read_at \nFROM chat \nWHERE JSON_EXTRACT(chat.meta, ?) IS 1 AND JSON_EXTRACT(chat.meta, ?) = ? AND JSON_EXTRACT(chat.meta, ?) = ?', ('$."internal"', '$."type"', 'timer', '$."status"', 'pending'))
原因分析
可能原因:v0.11.0 新增的定时器(timer)轮询功能,每秒执行一次 SELECT ... FROM chat WHERE JSON_EXTRACT(...) 查询,用于检查是否有待处理的 timer 聊天记录。由于 chat.meta 是 JSON 字段,且未建立虚拟索引(virtual index),SQLite 只能对该表进行全表扫描。当 chat 表包含较多历史数据时,频繁的全表扫描导致 CPU 和内存使用大幅增加。
环境排查
- Open WebUI 版本:v0.11.0
- 安装方式:Docker
- 操作系统:Ubuntu 24.04
- 数据库:SQLite(使用默认配置)
- CPU 架构:arm64(树莓派 5)
- 日志设置:启用
GLOBAL_LOG_LEVEL=debug可确认轮询查询的执行频率
解决步骤
- 临时回退:将 Open WebUI 降级回 v0.10.2,空闲性能可恢复正常。
- 等待官方修复:关注 #27622 的进展,官方计划为 timer 查询添加索引或优化轮询逻辑。
- 深度调试:若需保留 v0.11.0,可在安全模式下设置
SAFE_MODE=true观察是否影响 timer 功能(该模式下不会执行 timer 查询,但会禁用部分安全功能)。注意:Issue 未提及这一做法,此处仅为推测。
验证方法
监控 Open WebUI 容器空闲时的 CPU% 和 RSS 内存:正常状态下 CPU 应接近 0%,RSS 不超过 1GB(视聊天记录量而定)。同时观察 debug 日志中 timer 轮询查询的间隔和耗时,若不再出现或频率恢复正常,则问题解决。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


