一、清理前准备:查看内存与缓存状态
在清理缓存前,建议先通过以下命令确认系统内存使用情况及缓存占用情况,避免不必要的操作:
free -h:以人类可读格式(GB/MB)显示内存总量、已用内存、空闲内存及缓存(buffers/cache)占用情况,重点关注“buff/cache”列的值。vmstat 1:实时监控系统虚拟内存、进程、CPU等状态,观察“cache”(页面缓存)和“buff”(缓冲区缓存)的变化趋势,判断是否需要清理。二、清理不同类型缓存的具体步骤
Linux系统缓存主要包括页面缓存(PageCache)、目录项缓存(dentry)、inode缓存及slab缓存(内核对象缓存),以下是针对性清理方法:
页面缓存用于加速文件系统读写,清理后会释放大量内存,但系统需要重新从磁盘加载常用文件。
命令:
sudo sync && sudo echo 1 > /proc/sys/vm/drop_caches
说明:sync命令将未写入磁盘的缓存数据同步到磁盘,避免数据丢失;echo 1仅清理页面缓存。
dentry(目录项)和inode(索引节点)缓存用于加速文件查找,清理后可释放用于目录和文件元数据的内存。
命令:
sudo sync && sudo echo 2 > /proc/sys/vm/drop_caches
说明:echo 2仅清理dentry和inode缓存,不影响页面缓存。
若需彻底释放内存,可同时清理三类缓存,适合内存紧张的场景。
命令:
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches
说明:echo 3等同于1+2,清理所有类型的缓存。
slab缓存存储内核对象(如inode、dentry、文件描述符等),清理可释放内核占用的内存,但可能影响内核性能。
命令:
sudo sync && sudo echo 1 > /proc/sys/vm/drop_caches
说明:echo 1也可用于清理slab缓存,若需更精细控制,可使用slabtop命令查看具体内核对象占用情况。
不同发行版的软件包管理器会缓存下载的安装包,定期清理可释放磁盘空间:
sudo apt-get clean(删除所有已下载的软件包文件);sudo apt-get autoclean(删除旧版本的软件包文件)。sudo yum clean all(YUM);sudo dnf clean all(DNF)(删除所有缓存数据)。sudo pacman -Sc(删除已下载的软件包文件);sudo pacman -Scc(彻底清理所有缓存,包括未安装的软件包)。三、调整缓存策略(可选,优化长期性能)
若需调整系统缓存回收倾向,可修改以下参数:
vfs_cache_pressure:控制内核回收dentry和inode缓存的倾向,默认值100(合理比例)。设置为更高值(如200)会增加回收频率,适合内存紧张的系统;设置为更低值(如50)会减少回收,适合频繁访问文件的场景。sudo sysctl -w vm.vfs_cache_pressure=50  # 临时调整
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf  # 永久生效
drop_caches永久生效:若需每次重启后自动清理缓存,可将清理命令添加到/etc/rc.local文件(需赋予执行权限)或通过cron定时任务实现。四、定期自动清理(可选,自动化维护)
通过cron定时任务实现定期清理,例如每天凌晨2点自动清理所有缓存:
crontab -e编辑当前用户的cron任务;0 2 * * * sync && echo 3 > /proc/sys/vm/drop_caches
五、注意事项
root权限(使用sudo),普通用户无法执行。free -h显示“buff/cache”占用过高)或排查内存问题时清理。systemd-resolved、nscd、dnsmasq),需单独清理DNS缓存(参考后续DNS缓存清理步骤)。