首页/系统/Linux 运维命令速查/场景:判断内存是否泄漏(趋势法)
性能与监控48 条

场景:判断内存是否泄漏(趋势法)

怀疑泄漏别靠感觉:定时记录 RSS/available,按小时均值画趋势;排除缓存与周期性任务后再定性。

Linux 运维命令速查系统更新于 2026-10-12
场景应用内存缓慢上涨
目标区分泄漏/缓存/压力
工具链定时采样 + 趋势比对 + 回归

采样脚本

采样脚本
for i in $(seq 1 24); do
  echo "$(date -Is) $(awk '/VmRSS/{print $2}' /proc/$(pgrep -f app.jar | head -1)/status) $(awk '/MemAvailable/{print $2}' /proc/meminfo)"
  sleep 3600
done | tee /tmp/mem-trend-$(date +%F).log

分析

分析
awk '{print $2}' /tmp/mem-trend-*.log | sort -n | head    # 观察单调性
# 若 RSS 阶梯下降后又长:多为缓存/GC 行为,不是泄漏
Java 应用看堆(jstat/jcmd)与 RSS 两条线:堆稳而 RSS 涨多为堆外(direct buffer/线程栈/JNI)。

易错点

  • 把页缓存计入应用 RSS 对比会误判;RSS 与 PSS 口径不同(共享内存重复计数)
  • 只看 24 小时不够:长尾泄漏按周增长,采样要跨周期(含业务高峰)

数据来源与参考

  • proc(5)(status 字段)
  • OpenJDK 诊断工具文档(jcmd/jstat)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌