发布于 

Linux缓存内存清理

Linux 中清除缓存(Cache)

每个 Linux 系统有三种选项来清除缓存而不需要中断任何进程或服务。

Cache,译作“缓存”,指 CPU 和内存之间高速缓存。Buffer,译作“缓冲区”,指在写入磁盘前的存储再内存中的内容。

1.仅清除页面缓存(PageCache)

sync; echo 1 > /proc/sys/vm/drop_caches

2.清除目录项和inode

sync; echo 2 > /proc/sys/vm/drop_caches

3.清除页面缓存,目录项和inode

sync; echo 3 > /proc/sys/vm/drop_caches

上述命令的说明:

sync 将刷新文件系统缓冲区(buffer),命令通过“;”分隔,顺序执行,shell在执行序列中的下一个命令之前会等待命令的终止。正如内核文档中提到的,写入到drop_cache将清空缓存而不会杀死任何应用程序/服务,echo命令做写入文件的工作。

如果你必须清除磁盘高速缓存,第一个命令在企业和生产环境中是最安全,"...echo 1> ..."只会清除页面缓存。 在生产环境中不建议使用上面的第三个选项"...echo 3 > ..." ,除非你明确自己在做什么,因为它会清除缓存页,目录项和inodes。

创建定时清理脚本

我们将创建一个 shell 脚本,通过一个 cron 调度任务在每天下午2点自动清除RAM缓存。如下创建一个 shell 脚本 clearcache.sh 并在其中添加以下行

#!/bin/bash
echo "echo 1 > /proc/sys/vm/drop_caches"

给clearcache.sh文件设置执行权限

chmod 755 clearcache.sh

现在设置一个每天下午2点的定时任务来清除RAM缓存,打开crontab进行编辑。

crontab -e

添加以下行,保存并退出。

#每天早上3点执行
0 3 * * * /文件路径/clearcache.sh

清除Linux的交换空间

命令

#关闭交换空间然后开启交换空间
swapoff -a && swapon -a

了解有关风险后,您可以将上面的命令添加到cron中。

现在,我们将上面两种命令结合成一个命令,写成正确的脚本来同时清除RAM缓存和交换空间。

echo 1 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a