[Bug]: Heavy RAM Usage over time

用户通过 Docker 部署 LiteLLM Proxy,每天发起大量请求(含 proxy 和 pass-through 模式),运行数天后 RAM 持续增长,直至触发监控警报或容器因内存耗尽被重启。部分用户反映在空闲状态下内存也会逐步膨胀,单容器可消耗 14–20 GB 内存。

[Bug]: Heavy RAM Usage over time

[Bug]: Heavy RAM Usage over time

快速结论:LiteLLM Proxy 在持续运行数天后会出现显著的内存泄漏,尤其是启用了 pass-through endpoints 的场景。优先排查 initialize_pass_through_endpoints 是否为重复注册路由产生泄漏,或者通过环境变量限制内存队列大小。

问题场景

用户通过 Docker 部署 LiteLLM Proxy,每天发起大量请求(含 proxy 和 pass-through 模式),运行数天后 RAM 持续增长,直至触发监控警报或容器因内存耗尽被重启。部分用户反映在空闲状态下内存也会逐步膨胀,单容器可消耗 14–20 GB 内存。

报错原文

Traceback (most recent call last):
  File "/usr/lib/python3.13/site-packages/litellm/proxy/hooks/proxy_track_cost_callback.py", line 178, in _PROXY_track_cost_callback
    raise Exception(
        "User API key and team id and user id missing from custom callback."
    )
Exception: User API key and team id and user id missing from custom callback.
10:34:50 - LiteLLM Proxy:ERROR: proxy_track_cost_callback.py:215 - Error in tracking cost callback - User API key and team id and user id missing from custom callback.

日志中无直接内存溢出错误,但上述回调错误反复出现。

原因分析

项目维护者确认存在内存泄漏问题,主要可能原因有两个:

  • pass-through endpoints 路由重复注册:initialize_pass_through_endpoints 函数中,当动态更新 endpoint 时,FastAPI 路由表会被重复添加相同的路由,导致内存持续累积。
  • 内存队列(in-memory queue)过大: 高并发场景下,默认的队列大小可能积累大量待处理数据,占用大量 RAM。

注释中用户指出的 proxy_track_cost_callback 重复报错可能加剧资源消耗,但不是主因。

环境排查

  • LiteLLM 版本:v1.73.6-stable.patch.1 ~ v1.74.15
  • 部署方式:Docker(Almalinux 9)
  • 每日调用量:< 20k 次
  • 是否使用 pass-through endpoints?
  • 是否配置了 cost tracking / langfuse 等回调?

解决步骤

  1. 优先尝试config.yaml 中设置环境变量,限制内存队列大小:
    environment_variables:
      MAX_IN_MEMORY_QUEUE_FLUSH_COUNT: "5000"
      MAX_SIZE_IN_MEMORY_QUEUE: "500"
  2. 如果使用了 pass-through endpoints,升级到包含修复的镜像:ghcr.io/berriai/litellm:litellm_dev_memory_fix-litellm_v1.73.0-dev_memory_fix_2
  3. 避免动态更新 pass-through endpoints 导致重复注册;如无法避免,可配合步骤 2 的镜像。
  4. 为容器设置内存上限作为临时保护:
    deploy:
      resources:
        limits:
          memory: 14G
        reservations:
          memory: 2G
  5. 最直接的临时方案:添加定时任务(cron)每 12 小时重启容器,缓解内存增长。

验证方法

部署修复镜像或配置环境变量后,持续运行至少 48 小时,监控 Docker 容器内存使用曲线,确认不再出现持续线性增长。可通过 docker stats 或内存监控工具观察,确保重启间隔显著延长或无需手动干预。

参考来源

BerriAI/litellm #12685

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10894

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注