Linux 内存占用逐步升高的排错思路-linux运维

Linux cached内存可自动回收,关键看MemAvailable是否持续逼近0及OOM Killer日志;需排查overcommit设置、cgroup限制、NFS缓存、句柄泄漏及业务变更点。

内存占用持续上涨但 free 显示有大量 cached

Linux 的 cached 内存(页缓存)本就是可回收的,只要应用需要,内核会自动释放。别一看到 free -h 里 available 值低就断定“内存泄漏”。关键看 available 是否持续逼近 0,以及是否有进程因 OOM 被杀——这才是真压力。

实操建议:

  • 用 free -h 看 available 列,不是 free 列
  • 运行 watch -n 1 'free -h; echo; cat /proc/meminfo | grep -E "^(MemAvailable|Cached|SReclaimable)"; echo; ps aux --sort=-%mem | head -5' 持续观察趋势
  • Cached 高但 SReclaimable 占比低(比如 MADV_DONTNEED 或文件被锁)

确认是否存在用户态内存泄漏:用 pmap 和 /proc/[pid]/smaps

单个进程 RSS 持续增长,且不随业务负载下降而回落,才值得怀疑泄漏。不要只看 top 的 %MEM 排序——它按比例算,小进程占比高但绝对值未必大。

实操建议:

  • 先用 ps aux --sort=-rss | head -10 找 RSS 最大的进程,再查其 pmap -x [pid],关注 mapped 和 written 列是否异常增长
  • 深入看 cat /proc/[pid]/smaps | awk '/^Size:/ {sum+=$2} END {print sum}' 统计总虚拟内存;对比 Rss: 和 Pss:,若 Rss 持续涨而 Pss 不涨,可能是共享内存或 mmap 区域在累积
  • 对 Java 进程,优先用 jstat -gc [pid] 看老年代是否持续增长且 GC 后不回落;对 Go 进程,检查 GODEBUG=madvdontneed=1 是否缺失(旧版 Go 默认不主动归还内存)

slabtop 显示 kmalloc-* 或 dentry 占用飙升

内核 slab 分配器里的对象(如 dentry、inode、ext4_inode_cache)持续增长,往往意味着文件系统层存在资源未释放:比如程序反复 open 不 close、遍历海量小文件后未释放 dcache、或 NFS 客户端元数据缓存堆积。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Linux 内存占用逐步升高的排错思路-linux运维
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029269+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4029269+
  • 本周更新: 0+
  • 最后更新: 2026-03-16