在 Linux 中,“清理内存占用”通常可以从释放缓存、结束进程、排查内存泄漏三个层面来做。下面按安全 → 进阶 → 不建议的顺序说明。
在清理前,先确认问题来源:
free -h
重点关注:
查看进程内存占用:
top
# 或
htop
按内存排序:
top → 按 Mhtop → 按 F6 选 PERCENT_MEMLinux 会自动用空闲内存做缓存,一般不需要手动清理,但在某些场景下可以释放。
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
说明:
1:只清 page cache2:清 dentries + inodes3:全部清理(最常见)✅ 不会杀进程,不会丢数据
⚠️ 只是临时释放,系统会重新缓存
ps aux --sort=-%mem | head
kill PID
# 或强制
kill -9 PID
⚠️ 不要乱杀系统进程(如 systemd、kthreadd)
slabtop
如果 dentry / inode_cache 很高,通常是文件缓存问题。
cat /proc/meminfo
关注:
MemAvailableSlabSReclaimableswapon -s
free -h
sudo swapoff -a
sudo swapon -a
⚠️ 关闭 swap 可能导致内存不足时进程被 OOM 杀掉
drop_caches:会影响性能/proc/sys/vm/ 参数而不了解含义| 场景 | 建议 |
|---|---|
| 内存看起来被占满 | 看 available,不是 used |
| buff/cache 很高 | 正常,不用清 |
| 程序内存泄漏 | 重启程序 |
| 服务器卡顿 | 查 swap + top |
| Docker / Java 占内存 | 限制内存上限 |
如果你愿意,可以把下面信息发我,我可以帮你精准分析:
free -h
top -b -n1 | head -20
或者说明: