快速结论:该报错发生在 Open WebUI v0.11.0 使用 SQLite 数据库且数据库规模较大(如 1.30 GB、约 15k 聊天记录)时,高并发发送消息会导致 CPU 飙升至 1500% 并触发 OOM 崩溃。优先排查数据库索引缺失问题,可尝试应用 issue: Missing chat index can cause high sqlite mem usage and cpu usage 对应的补丁版本。
适用环境:Docker 部署的 Open WebUI v0.11.0;macOS Sonoma 14.8.7 (x86-64);SQLite 数据库存放于本地 SSD 并通过 bind mount 挂载;无 Ollama 实例;内存 16 GB(Docker 分配 10 GB)。
最快修复方案:暂无确认的一步修复方案。Issue 讨论中提到 dev 分支包含多项性能改进,但测试表明问题仍然存在。可优先尝试应用 Issue #27663 中的补丁(修改 TIMER_POLL_INTERVAL=60 并安装对应 PR 版本),实测表明该补丁可显著降低基线内存占用(从 1.9 GiB 降至 0.9 GiB)。
注意事项:补丁方案仅为测试验证,尚未合并到正式版本;该方案降低了内存占用但仍需进一步验证高并发场景下的稳定性。设置 DATABASE_ENABLE_SQLITE_WAL=True 可能有助于减少数据库锁竞争,但并未在 Issue 中作为最终解决方案确认。
问题场景
用户通过 Docker Desktop 在 macOS 上运行 Open WebUI v0.11.0,SQLite 数据库已增长至 1.30 GB(约 15k 聊天记录)。在三个不同聊天窗口同时发送消息时,CPU 占用从正常水平骤升至 500%,随后稳定在 1500% 并使系统完全卡死,最终进程被 OOM 或看门狗杀死(退出码 137)。即使用户只发送单条消息,也会导致单核 CPU 达到 100%。该问题在 v0.11.0 之前的版本中完全不存在。
报错原文
issue: Missing chat index can cause high sqlite mem usage and cpu usage
open-webui exited with code 137 (restarting)
database is locked
py-spy top: 95+% CPU in _connection_worker_thread (aiosqlite)
GIL: 4%
原因分析
可能原因:Open WebUI v0.11.0 在 SQLite 数据库中缺少 chat 表的必要索引,导致高并发读取聊天记录时 SQLite 执行全表扫描,产生大量 CPU 和内存消耗。PySpy 分析显示 95% 以上的 CPU 消耗集中在 aiosqlite 的 _connection_worker_thread,而 GIL 仅占 4%,表明问题不是 Python 代码本身的 CPU 密集计算,而是 SQLite C 层在反复扫描和读取大表。另一个 database is locked 错误提示数据库锁竞争也是加重因素。该问题已确认与 #27622 相关,维护者确认并标记为 bug。
环境排查
- 确认 Open WebUI 版本为 v0.11.0(或更高版本)
- 检查 SQLite 数据库文件大小(1.30 GB 以上时风险显著增加)
- 确认是否设置了
TIMER_POLL_INTERVAL环境变量(测试中设置为 60 仍然复现) - 确认
DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL的值 - 确认是否启用
DATABASE_ENABLE_SQLITE_WAL=True(建议开启) - 确认 Docker 分配的内存上限(10 GB 仍会触发 OOM)
- 数据库存放位置:本地 SSD 而非网络存储
解决步骤
- 备份现有 SQLite 数据库文件,防止修复过程中数据丢失。
- 尝试切换到
dev分支或最新开发版本,测试是否包含性能改进(注意:测试表明dev分支52145eede9940abbb2fc6d2a5bce8b9e955530d6仍存在问题)。 - 可优先尝试应用 #27663 的补丁:
设置环境变量TIMER_POLL_INTERVAL=60,并安装包含该 PR 补丁的版本。 - 同时设置
DATABASE_USER_ACTIVE_STATUS_UPDATE_INTERVAL=60和DATABASE_ENABLE_SQLITE_WAL=True以降低数据库压力。 - 为 Docker 容器设置明确的内存上限(测试中使用 6 GB),防止 Docker VM 完全锁死无法监控。
- 安装
py-spy工具到容器中(apt-get install py-spy或 pip 安装),运行py-spy top -p 1 -r 25 --nonblocking监控 CPU 热点,确认是否仍集中在 aiosqlite。 - 如果补丁无效,回退到 v0.11.0 之前的稳定版本,等待包含索引修复的正式版本发布。
验证方法
通过 htop(宿主机和容器内同时观察)或 docker stats 监控 CPU 和内存。测试方法:启动服务后,在四个不同聊天窗口依次提交消息,观察是否出现 CPU 飙升至 500% 以上或内存持续攀升至上限。应用补丁后,基线内存应显著下降(从 1.9 GiB 降至约 0.9-1.3 GiB)。同时使用 py-spy top 确认 CPU 热点是否不再集中在 _connection_worker_thread。若连续提交多条消息后系统响应正常且无 OOM 退出,即可认为问题已解决。
参考来源
open-webui/open-webui #27745
关联 Issue:#27622
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


