Linux内存泄漏定位:从现象到进程的排查步骤

服务器内存一直涨,重启后又慢慢升高,多数情况下不是系统本身的问题,而是某个进程没有正确释放内存。
定位思路很简单:先确认内存到底被谁用掉,再观察它是否持续增长,最后锁定具体进程和代码路径。
下面按这个顺序展开。

先判断是缓存还是真实占用

登录服务器后不要急着下结论,先看整体内存分布:

free -h

重点看 available 这一列。
Linux 会把空闲内存拿去做文件缓存,buff/cache 偏高但 available 充足,通常不是泄漏。
真正需要警惕的是 available 持续下降,同时 used 不断上升。

为了排除缓存干扰,可以手动释放缓存观察变化(生产环境谨慎操作):

echo 1 > /proc/sys/vm/drop_caches
free -h

如果释放缓存后可用内存明显回升,说明之前大部分是缓存;
如果释放后很快又降下去,问题更可能出在进程上。

用 top 找到内存消耗大户

确认是进程问题后,用 top 按内存排序:

top

进入界面后按 Shift + M,进程会按内存占用从高到低排列。
重点看 RES 列,它表示进程实际占用的物理内存。

零基础用户容易混淆两列:

  • VIRT:虚拟内存,包含申请但未真正使用的部分,参考价值有限。
  • RES:常驻内存,才是真实占用的物理内存。

如果某个进程的 RES 明显高于其他进程,先记下它的 PID,继续观察。

观察内存是否持续增长

单次快照不能证明泄漏,需要看趋势。
用循环命令每隔一段时间记录一次:

while true; do date; ps -p 1234 -o pid,rss,vsz,comm; sleep 60; done

把 1234 换成实际 PID。RSS 单位是 KB,如果它在一段时间内只涨不降,并且业务量没有同步增加,就基本可以怀疑泄漏。

也可以借助 smem 查看更细的 PSS 数据:

smem -k -P 进程名

PSS 会把共享内存按比例分摊,比 RSS 更接近真实占用。

深入进程内部看内存分布

锁定进程后,用 pmap 查看它的内存段:

pmap -x 1234 | sort -k3 -n -r | head -20

输出里重点看 mapped 和 dirty 较大的匿名段。
如果某段匿名内存持续增大,往往对应堆内存或 mmap 分配没有释放。

还可以直接读 /proc 目录:

cat /proc/1234/status | grep -i vm
cat /proc/1234/smaps_rollup

VmRSS 对应常驻内存,VmSize 对应虚拟内存。smaps_rollup 里能看到 Anonymous 和 Private_Dirty 的汇总,方便快速判断。

结合日志和监控确认根因

内存增长的常见来源包括:

  • 程序内部缓存没有设置上限。
  • 连接、文件句柄或对象没有正确释放。
  • 定时任务或请求处理中反复创建大对象。

可以检查应用日志中是否有频繁重连、队列堆积、超时重试等异常。
如果服务器装了监控工具,调出该进程最近几天的内存曲线,和业务高峰对比,更容易判断是正常波动还是泄漏。

对于 PHP、Java、Python 这类语言,还可以用各自的内存分析工具进一步定位,例如 Java 的 jmap、PHP 的 memory_get_usage 等。

避坑与验证

排查过程中注意几点:

  • 不要只看 free 就判断泄漏,buff/cache 高是正常现象。
  • 不要用 VIRT 排序找问题进程,容易误判。
  • 释放缓存和重启服务都会影响线上业务,操作前确认影响范围并做好回滚准备。
  • 单次采样没有意义,至少观察 10 到 30 分钟。

处理完成后,继续用同样的 ps 循环观察一段时间。
如果 RSS 稳定不再持续上涨,说明处理有效;
如果仍然增长,需要回到 pmap 和日志环节继续缩小范围。

内存泄漏定位没有一键命令,核心就是先看整体、再锁进程、后看内部结构,最后用趋势验证。
按这个顺序走,零基础也能一步步把范围缩小到具体进程。

分享到:
上一篇
Linux查看端口占用命令:从定位到释放的完整操作
下一篇
Linux网络延迟排查:从ping到tcpdump的完整定位思路
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意