Linux系统清理缓存的方法与注意事项
在清理缓存前,务必执行sync命令,将内存中未写入磁盘的缓存数据同步到磁盘,避免数据丢失。例如:
sync
此外,可通过free -h命令查看当前内存使用情况(重点关注buff/cache列,代表缓存占用的内存),确认是否需要清理。
Linux通过/proc/sys/vm/drop_caches接口提供缓存清理功能,支持清理不同类型的缓存,具体如下:
页面缓存用于加速文件系统读写操作,清理后系统需重新从磁盘读取文件数据,但不会影响正在运行的进程。命令:
sudo sync && echo 1 > /proc/sys/vm/drop_caches
或使用sysctl命令:
sudo sysctl -w vm.drop_caches=1
目录项缓存(dentries)用于加速目录查找,inode缓存用于存储文件元数据(如权限、大小),清理后可释放这部分内存,但会增加后续文件访问的延迟。命令:
sudo sync && echo 2 > /proc/sys/vm/drop_caches
或:
sudo sysctl -w vm.drop_caches=2
若需一次性释放所有缓存,可使用以下命令(最常用):
sudo sync && echo 3 > /proc/sys/vm/drop_caches
或:
sudo sysctl -w vm.drop_caches=3
此操作会清除所有缓存,系统需重新加载数据,可能导致短暂性能下降。
除系统内核缓存外,还需定期清理软件包管理器的缓存,以释放磁盘空间:
APT缓存存储了下载的软件包文件,可通过以下命令清理:
sudo apt-get clean # 清理所有下载的软件包
sudo apt-get autoclean # 清理过时的软件包(仅保留当前可用的版本)
YUM缓存在/var/cache/yum目录下,可通过以下命令清理:
sudo yum clean all # 清理所有缓存
若需删除旧内核(保留最新1个),可添加:
sudo package-cleanup --oldkernels --count=1
Snap包的缓存可通过以下命令清理:
sudo snap refresh --purge # 清理所有不再需要的snap包
若需定期自动清理缓存,可通过cron任务实现。步骤如下:
/usr/local/bin/clear_cache.sh):#!/bin/bash
sync
echo 3 > /proc/sys/vm/drop_caches
echo "Cache cleared at $(date)" >> /var/log/clear_cache.log
sudo chmod +x /usr/local/bin/clear_cache.sh
cron任务(如每天凌晨2点执行):crontab -e
在文件末尾添加:
0 2 * * * /usr/local/bin/clear_cache.sh
保存后,cron会自动执行清理任务。
root权限,建议使用sudo执行命令。