
Chat Messages panel crashes with OOM when database has large volume of messages — no pagination or default limit
快速结论:该问题通常发生在 Flowise 仪表板的 Chat Messages 面板中,当数据库积累大量消息(约 15.7 万条)时,Node.js 因一次性加载全部消息并序列化为 JSON 而导致堆内存溢出(OOM)。优先排查的是是否使用了服务器端分页或缩短默认日期范围。
问题场景
用户通过 Docker 自托管 Flowise(版本 3.1.0),使用 SQLite 或 PostgreSQL 17 作为数据库,在仪表板的 Chat Messages 面板中浏览消息时触发。面板默认加载最近 30 天的所有消息,在高消息量(约 15.7 万条)下导致崩溃。
报错原文
[1:0x7fcef78f2660] Mark-Compact 8036.4 (8238.9) -> 8036.4 (8238.9) MB,
626.75 / 0.00 ms allocation failure; scavenge might not succeed
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
原因分析
根本原因在于 Chat Messages 面板缺乏服务器端分页和默认日期限制。面板在用户有机会更改日期过滤器之前,自动加载最近 30 天的全部消息。针对数据库中的 ~15.7 万条消息,Node.js 试图一次性将所有消息序列化为 JSON 并加载到内存中,消耗 8-12 GB 内存后导致堆内存溢出。此问题不依赖于数据库后端,使用 SQLite 和 PostgreSQL 17 均可复现。数据库本身查询速度较快,瓶颈在 Node.js 内存处理。
环境排查
- Flowise 版本:3.1.0(自托管,Docker 方式)
- 数据库:SQLite 或 PostgreSQL 17
- 消息量:约 15.7 万条
- 运行环境:Linux、Docker
- 浏览器:Chrome(任意浏览器均可复现)
解决步骤
- 临时解决方法(仅缓解,非修复): 增加 Node.js 堆内存限制。在 Flowise 的 Docker 环境变量中添加
NODE_OPTIONS="--max-old-space-size=16384"(16 GB)。此方法仅作为应急,不能解决根本的分页问题。 - 期望的永久修复(需开发者实现): 实施服务器端分页,配置每页消息数,例如 100-500 条每页。
- 允许通过环境变量(例如
CHATMESSAGE_DEFAULT_DAYS=7)配置默认日期范围,或默认将初始加载窗口缩短为 7 天。 - 采用流式加载或懒加载,先加载当前视口可见的消息,而非一次性加载全部。
- 对于用户:可优先尝试缩减数据库中的消息量,或使用更短的时间窗口手动查询(如果面板已支持)。
验证方法
在实施服务器端分页或缩短默认日期范围后,重新导航至 Chat Messages 面板。确认面板能够加载页面(例如每页 100 条消息),且浏览器不出现内存溢出崩溃。对于同样包含大量消息的数据库,应确保不再出现 “FATAL ERROR: Reached heap limit Allocation failed – JavaScript heap out of memory” 报错。



![[程序员] ai 时代,感觉啥都通货膨胀, GitHub stars、各种 APP: to_do list、记单词、记账、打卡......](https://www.chat-gpts.plus/wp-content/uploads/2026/06/ai_cover_3-619-768x403.jpg)