1.1 KiB
1.1 KiB
| date | status | topic | impact | |||
|---|---|---|---|---|---|---|
| 2026-06-01 | adopted | connection-pool |
|
连接池主动释放 + Mem0 实例 LRU 缓存
背景
Mem0 的 PGVector 后端在实例 __init__ 时从连接池取一个连接,理论上在 __del__ 时归还。
但 Python GC 时机不确定,高并发下连接迟迟不归还会迅速打满 MEM0_POOL_SIZE(默认 50),导致后续请求阻塞。
同时若为每个 (user_id, agent_id) 都新建 Mem0 实例且不回收,也会无限占用连接。
决策
Mem0Manager用OrderedDict维护最多 50 个 Mem0 实例的 LRU 缓存,超出淘汰最旧的。- 每次记忆操作(recall/add)后调用
_release_connection()立即把连接归还连接池,不等 GC。
影响
- 连接池不再被慢 GC 拖垮,高并发稳定。
- 实例数量有上界,内存可控。
Gotchas
- 不要在操作链路里持有 Mem0 实例的连接跨多个 await,会绕过释放逻辑。
- LRU 上限(50)与
MEM0_POOL_SIZE(50)相关联,调整其一时需一并评估。