首页/AI/大模型部署与运维速查/资源泄漏观察:三条曲线
运维监控与排障50 条

资源泄漏观察:三条曲线

长跑服务盯三条曲线:进程 RSS、CUDA reserved、文件描述符与线程数;缓慢单调上涨且不回落就要采样比对,区分分配器缓存的正常增长与真实泄漏。

长跑服务盯三条曲线

长跑服务要盯三条曲线:进程内存占用、显存保留量、文件描述符与线程数。缓慢单调上涨且周期高峰之后不回落,就要采样比对,区分是分配器缓存的正常增长还是真实泄漏。判定的关键是跨天趋势,不是某个时刻的绝对值。

基本信息

适用平台Linux 上的长跑推理服务
观察对象进程内存、显存保留量、描述符与线程数
判定依据连续多天单调上涨且高峰后不回落
采样方式定时记录指标并存档成表

采样命令

采样命令
pid=$(pgrep -f vllm | head -1)
ps -o rss= -p $pid            # 进程常驻内存(KB)
ls /proc/$pid/fd | wc -l      # 文件描述符数
ls /proc/$pid/task | wc -l    # 线程数
nvidia-smi --query-gpu=memory.used --format=csv -l 60

判定与处置

  • 判定:连续数天单调上涨、周期高峰后不回落,才是泄漏信号
  • 对照:重启前后的基线差,以及版本发布时间点
  • 处置:短期用定时重启配合排空兜底,长期按最小复现报给上游
  • 记录:每次采样存成表格,趋势判断需要跨天数据
  • 验证:修复版本上线后用同一条采样命令复核曲线

三条曲线的读法

曲线正常表现异常表现
进程内存随负载波动,峰值后回落持续单调上涨
显存保留量高位平稳缓慢抬升不回落
描述符与线程稳定在小范围只增不减
把采样结果存档成表格:趋势判断需要跨天数据,单点快照说明不了问题。
分配器缓存不等于泄漏:保留量长期高位平稳属于正常现象,先看是否单调上涨。
用定时重启兜底时要配合排空:直接重启会打断在途请求,把可用性问题换成另一类问题。
对比基线要用同一负载:刚重启完立刻测的曲线没有可比性,等流量跑起来之后再判断趋势。
把每次重启的时间点标在曲线上:重启会让曲线归零,标注之后才能看出跨重启的长期趋势。

易错点

  • 把分配器缓存当泄漏:保留量高位平稳属正常,先看是否单调上涨
  • 只看单次采样:没有跨天趋势,判断不出是波动还是泄漏
  • 重启掩盖问题:定时重启让曲线归零,真实泄漏反而更难被发现
  • 漏掉描述符与线程数:句柄与线程泄漏同样会导致资源耗尽,只是曲线不同

数据来源与参考

  • PyTorch 官方文档:CUDA memory management(缓存行为说明)
  • Linux proc(5) 手册(man7.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌