内存占用高怎么查真实原因
缓存也算进 used 是最常见的误判,先分清可用内存再动手。命令都会敲,差别在于知不知道每一步在改什么,出问题能不能退回去。
下面按“先判断范围、再处理、最后防复发”的顺序展开,涉及 内存占用高、free 的关键动作都给了具体做法,可以照着走。
free -h 看 available
available 接近 0 才是真紧张。
拿不准的时候先做备份再做变更,成本最低。
按进程排序
top 里按 M 排序,看 RSS 而不是 VIRT。
容易踩的坑:最容易出问题的是细节不一致:版本、路径、参数任意一处对不上,现象就和预期差很远。
缓存可回收
buff/cache 高属正常,必要时 echo 3 清缓存验证。
同一时间只改一项,改完立刻验证,出问题也好定位。
持续增长才是泄漏
隔十分钟采两次数据对比,稳定上涨再查代码。
速查表
| 环节 | 关键动作 |
|---|---|
| free -h 看 available | available 接近 0 才是真紧张 |
| 按进程排序 | top 里按 M 排序,看 RSS 而不是 VIRT |
| 缓存可回收 | buff/cache 高属正常,必要时 echo 3 清缓存验证 |
| 持续增长才是泄漏 | 隔十分钟采两次数据对比,稳定上涨再查代码 |
常见问题
Q:内存占用高这类问题,最快的判断办法是什么?
先确认现象的范围:只有单台还是全部、只在某个时段还是持续。范围一缩小,原因基本就浮出来了。
Q:按文中的步骤做完,还需要注意什么?
把处理过程和最终生效的参数记下来。同类问题再出现时直接对照记录,比重查一遍快得多。
小结
回到这篇的四个环节:free -h 看 available、按进程排序、缓存可回收、持续增长才是泄漏。以上步骤按顺序做完,同类故障基本能自己处理。留一份操作记录,下次能省一半时间。
相关阅读:inode 用满了怎么办、磁盘满了怎么排查和清理。