服务器内存占用越来越高,很多人的第一反应是:程序发生了内存泄漏。于是开始重启服务、清理缓存,甚至直接扩容。但在 Linux 系统中,used 很高并不一定代表异常,Page Cache、内核 Slab、进程匿名内存、Swap 使用以及容器的 Cgroup 限制,都可能表现为“内存快满了”。
真正有效的排查,不能只看一张 top 截图,也不能只盯着 %MEM。首先要结合 Available、Swap、换页活动和 OOM 日志,确认系统是否存在真实的内存压力;然后再通过 RSS、PSS、RssAnon、VmSwap 等指标持续观察进程趋势,判断问题究竟来自用户态进程、缓存、内核对象,还是容器内存限制。
今天这篇按照“判断压力—初步筛查—锁定进程—区分类型—进阶定位—修复预防”的顺序,整理了一套 Linux 内存故障排查路径。
重点不是记住几条命令,而是建立正确的判断逻辑:内存升高不等于内存泄漏,重启也不等于解决问题。