Linux 内存占用很高?先搞懂这套内存机制
Linux 的设计理念是「闲置内存就是浪费」,会把大量空闲内存拿去做文件缓存。所以 free 里 free 那一列数字很小,通常不用紧张。
看 free -m 时忽略第一行的 free,重点看 available 这一列。它表示在不触发 swap 的前提下还能被新进程用掉多少内存,这才是真实余量。
- total:物理内存总量
- used:被进程实际占用(含共享段)
- buff/cache:文件缓存,可被随时回收
- available:真正可用余量,只看这个
- available 长期低于 total 的 10%
- swap 有持续读写,即 si / so 长期大于 0
- 出现 OOM Killer 日志,进程被无预警杀掉
第一,看到 free 很小就去装清理脚本——多数「一键释放内存」脚本做的是主动丢弃缓存,会让磁盘 IO 反而变差。第二,把 top 里的 %MEM 直接相加——共享内存会被重复计算。
判断内存够不够,看 available 和 swap 活动,不看 free。
1 核 1G 的机器上,先把 swap 配上并调低 swappiness,再给数据库收紧缓冲池(通常 128–256M 就够),收益比装任何优化脚本都大。






