在本指南中,我们将学习如何清除三种类型的缓存。在开始之前,请先熟悉以下术语:
PageCache:用于缓存文件的内容。最近访问的文件存储在此处,因此无需再次从硬盘读取它们,除非文件发生更改或缓存被清除以为其他数据腾出空间。这减少了对硬盘的读写操作,提高了系统性能,因为可以从内存(RAM)中更快地读取文件。
Dentry 和 inode 缓存:用于缓存目录和文件的属性。这些信息与 PageCache 密切相关,但不包含文件的实际内容。此缓存同样减少了磁盘的输入和输出操作。
Linux 系统提供了三种选项来清除缓存,而无需中断任何进程或服务。
仅清除页面缓存(PageCache)
# sync; echo 1 > /proc/sys/vm/drop_caches
清除目录项和 inode 缓存
# sync; echo 2 > /proc/sys/vm/drop_caches
清除页面缓存、目录项和 inode 缓存
# sync; echo 3 > /proc/sys/vm/drop_caches
sync
:刷新文件系统缓冲区,确保所有数据都写入磁盘。
echo
:向 /proc/sys/vm/drop_caches
文件写入值,从而清空缓存。
写入 1
清除页面缓存,写入 2
清除目录项和 inode 缓存,写入 3
清除所有缓存。
注意:
在生产环境中,建议仅使用 echo 1
清除页面缓存,因为这是最安全的方式。
不建议使用 echo 3
,除非你明确知道自己在做什么,因为它会清除所有缓存,可能导致系统性能下降。
在大多数情况下,Linux 系统会自动管理缓存,无需手动干预。但在以下场景中,清除缓存可能是必要的:
进行 I/O 性能测试:当你需要测试磁盘的实际性能时,清除缓存可以避免缓存对测试结果的影响。
调试系统问题:清除缓存可以帮助确定问题是否与缓存相关。
警告:
清除缓存会暂时降低系统性能,因为系统需要重新从磁盘加载数据。
不建议在生产环境中定期清除缓存,除非有明确的需求。
如果你确实需要定期清除缓存,可以通过创建一个 shell 脚本并使用 cron 任务来实现。
创建一个名为 clearcache.sh
的脚本文件:
#!/bin/bash
# 清除所有缓存(不推荐在生产环境中使用)
sync
echo 3 > /proc/sys/vm/drop_caches
赋予脚本执行权限:
# chmod 755 clearcache.sh
编辑 crontab 文件:
# crontab -e
添加以下行,使脚本在每天凌晨 2 点运行:
0 2 * * * /path/to/clearcache.sh
重要提示:
在生产环境中,不建议自动清除缓存,因为这可能导致系统性能下降,甚至引发问题。
如果必须清除缓存,请仅在低峰时段进行,并确保了解其影响。
如果你需要清除交换空间,可以执行以下命令:
# swapoff -a && swapon -a
注意:
与清除缓存类似,清除交换空间也可能对系统性能产生影响。
在执行此操作之前,请确保了解其后果。
如果你需要同时清除缓存和交换空间,可以将以下命令组合到一个脚本中:
#!/bin/bash
# 清除缓存和交换空间
sync
echo 3 > /proc/sys/vm/drop_caches
swapoff -a && swapon -a
printf '\n%s\n' 'Ram-cache and Swap Cleared'
在执行脚本前后,可以通过以下命令检查缓存和交换空间的使用情况:
了解缓存的作用:缓存可以提高系统性能,但清除缓存可能会导致性能下降。
谨慎操作:在生产环境中,仅在必要时清除缓存,并确保了解其影响。
避免自动清除:除非有明确需求,否则不建议设置定时任务自动清除缓存。