很多人一看到linux服务器内存占用90%就紧张:是不是卡了?是不是要崩了?要不要重启?其实linux内存机制和Windows不太一样:它会尽量把空闲内存拿来当缓存,提升读写速度,所以 “used 很高” 不一定是坏事。
今天用最通俗的话,把linux内存查看、监控、进程定位、安全清理缓存 一次性讲完。
一、如何查看linux服务器内存
free -g
重点看三列:
used:进程真正用掉的内存
buff/cache:文件缓存(可回收)
available:真正还能用的内存(最重要)
只要available充足,系统就没问题,used高并不代表内存不足。
二、最常用的7个linux内存命令
1.看总内存:free -g
free -g2.看详细内核内存:/proc/meminfo
cat /proc/meminfo
3.实时监控 + 按内存排序:top
top
4.更美观的监控:htop
htop
5.看哪个进程吃内存:ps 命令
ps aux --sort=-%mem |head -10
6.系统整体状态(内存 + CPU+IO):vmstat
vmstat 2
7.查看 Swap 使用情况
swapon --show
三、如何安全清理linux缓存
很多人服务器内存高,其实是cache太多,不是真的不够用。
安全清理缓存(root用户)
执行前先sync把数据写磁盘,更安全:
sync然后按照业务情况在下面三个命令中选择一个进行清理:
1.只清理页缓存
echo 1 > /proc/sys/vm/drop_caches#这个命令最安全

2.清理目录项 + inode
echo 2 > /proc/sys/vm/drop_caches
3.只清理页缓存全部清理
echo 3 > /proc/sys/vm/drop_caches
执行完再用 free -h 看,buff/cache 立刻下降,建议不要在业务高峰执行,清理缓存后,系统需要重新从磁盘读取数据到缓存,可能导致业务读写速度下降。
清理缓存的判断标准
#只有当以下情况同时满足时,才考虑清理缓存:#1.buff/cache占用超过总内存的70%#2.available小于总内存的20%#3.系统确实出现内存压力(oom或swap频繁使用)
四、swap清理
如果 swap 占用高,可一次性写回内存并清空:
swapoff -aswapon -a

swapoff -a 会将swap中的数据全部写回内存,执行前确保物理内存必须足够,否则可能会卡顿。一般只需前使用free -g,确认available大于swap使用量。
五、通过调整内核参数优化内存使用
编辑 sysctl 配置:
vi /etc/sysctl.conf加入以下优化(内存更稳、更少用 Swap):
vm.swappiness=10vm.dirty_background_ratio=5vm.dirty_ratio=10vm.min_free_kbytes=102400#调整完成后执行以下命令使得内存调整参数生效sysctl -p
内核参数说明:
1.vm.swappiness=10
业务服务器、数据库、中间件推荐该值;纯内存密集型服务可设为0.
2. 脏页参数(5/10)
该组合刷盘更激进,能减少内存堆积脏页、避免瞬间io抖动;
ssd服务器:影响很小,推荐使用
机械硬盘hdd/高io数据库:不建议设这么低,容易频繁刷盘拉高io,可改为 dirty_background_ratio=10、dirty_ratio=20
3. vm.min_free_kbytes=102400
102400 KB=100 MB,系统强制预留100M空闲内存。
内存小于 4G的小机器:建议调低(如 32768,即 32M),避免预留过多浪费内存;
8G 及以上服务器:100M 预留合理。
buff/cache高不等于内存不够
生产环境不要频繁清理缓存,会影响性能
真正内存不够:优先加内存、查程序泄漏
可用available判断是否真紧张
linux内存管理其实很智能,看懂这些命令,90% 的内存问题都能轻松解决。如果你觉得文章对你的运维工作有帮助,记得点赞和收藏。
#运维 #linux运维 #linux实战 #linux内存管理
高并发卡顿?别再死磕netstat了!这个Linux 神器,让你排查网络快人一步