零基础Linux内存优化:三步检查、清理与调优
Linux 服务器用久了,内存占用越来越高,网站响应变慢,但又不敢随便重启。
其实,Linux内存优化并不需要多深的理论,几步操作就能让系统恢复清爽。
本文从零开始,帮你搞清楚自己服务器的内存现状,安全释放缓存,调整交换分区策略,并且避开新手最容易踩的坑。
先看清内存到底怎么用的
动手优化之前,先搞清楚内存都去哪了。
打开终端(或者SSH连接到服务器),运行下面两个命令:
free -h
输出中会显示 total、used、free、shared、buff/cache、available 这几列。
重点看 available,它才是系统真正可用的内存。buff/cache 那一栏是 Linux 用来加速文件读写的缓存,占用大并不意味着内存不够。
再运行 top 命令,按 Shift + M 让进程按内存排序,找出谁是“内存大户”:
top -o %MEM
如果你用的是宝塔面板,直接进“面板设置”->“服务器性能”也能看到类似信息。
这一步的目的是确认当前内存压力,而不是盲目动手。
安全释放缓存与调整交换策略
很多教程一上来就让写 echo 3 > /proc/sys/vm/drop_caches,这相当于把系统缓存全扔掉,生产环境慎用。
更稳妥的做法是先用 sync 同步磁盘,再释放 1 级缓存(页缓存):
sync && echo 1 > /proc/sys/vm/drop_caches
释放后立刻用 free -h 验证,你会看到 buff/cache 减少,free 增加。
注意:这只是临时释放,过一会系统还会自动缓存数据。
下一步调整 swap 使用倾向。
swap 是硬盘上的虚拟内存,频繁读写会让服务器变慢。
通过修改 swappiness 值(默认 60),让系统更倾向于使用物理内存:
sysctl vm.swappiness=10
要永久生效,编辑 /etc/sysctl.conf,添加一行:
vm.swappiness = 10
保存后执行 sysctl -p 立即生效。
如果你的服务器内存本来就小(低于 2GB),swappiness 可以设到 30 左右;
内存充足的话设到 10 甚至 0 都行。
常见问题与避坑说明
Q:释放缓存后 MySQL 或 Nginx 变慢了怎么办?
A:这是正常现象,因为原本缓存在内存里的数据被清掉了,数据库和 Web 服务需要重新读取磁盘。所以不要在访问高峰时做释放操作,建议在凌晨低峰期执行。
Q:swap 设置为 0 会有什么风险?
A:如果物理内存被耗尽,系统会直接触发 OOM Killer 随机杀进程。建议保留少量 swap(比如总内存的 10%-20%)作为保险,同时监控内存使用。
Q:为什么释放缓存后“available”变化不大?
A:因为“available”不仅包含 free,还包含可以回收的 slab 内存。如果 slab 占用高,需要其他手段处理,比如重启某些服务。
Q:宝塔面板里在哪里看这些参数?
A:宝塔后台“监控”->“系统运行状态”可以看到 swap 和内存曲线;“终端”模块可以直接执行上述命令。
怎么确认优化效果
操作完成后,再次运行 free -h,对比优化前后的 available 和 swap used。
如果 available 明显增加,swap used 下降,说明优化有效。
你也可以用 vmstat 1 5 查看 swap 的 in/out 是否减少:
vmstat 1 5
如果 si 和 so 两列持续为 0 或很小,说明系统很少使用 swap,内存压力降低。
最后一个小技巧:将 free -h 和 vmstat 命令加入 cron 定时任务,每天凌晨自动记录一次,长期对比趋势。
如果你正在处理 Linux内存优化,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
记住:优化是持续观察的过程,不是一次性操作。