在之前的文章中介绍了如何申请AWS免费主机使用WordPress搭建自己的个人网站,但是在我使用过程中发现了一个问题,由于陆陆续续安装了好几个插件,偶尔在访问网站时会出现数据库连接出错的异常情况,导致页面无法访问。稍等一会儿刷新页面又可以正常访问了,怀疑是服务器资源紧张导致的。
登录服务器后使用free -h命令可以查看当前系统的内存使用情况,发现buff/cache占用空间较大,也就是缓存占用了较多空间,导致留给系统运行的空间就变小了,我的免费主机只有1G内存,资源非常有限。
因为缓存可能会占用过多的内存和和磁盘空间,影响系统的性能和稳定性。遇到这种情况,我们可以主动去清理缓存。在Linux系统中可以使用下面的方法来清理系统缓存:
- 使用sync命令来确保文件系统的完整性,将所有未写的系统缓冲区写到到到磁盘中。
- 使用echo命令来指定要清除的缓存类型,数字越大表示清除越多。例如:
- echo 1 > /proc/sys/vm/drop_caches:释放网页缓存。
- echo 2 > /proc/sys/vm/drop_caches:释放目录项和索引。
- echo 3 > /proc/sys/vm/drop_caches:释放网页缓存、目录项和索引。
- 使用sudo命令来提升权限,然后执行上述命令。例如:
- 方式一:利用管道和tee命令来执行sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
- 方式二:利用bash命令来执行sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
- 方式二:利用sh命令来执行sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
我在控制台命令手动执行了下列命令,发现效果还是挺明显的
sudo bash -c "echo 1 > /proc/sys/vm/drop_caches"
sudo bash -c "echo 2 > /proc/sys/vm/drop_caches"
sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
在清理缓存前,buff/cache占用321M。
清理缓存后,buff/cache占用174M,释放了约150M空间出来。
既然上述命令管用,那么应该让它能够自动执行,而不需要每次都手动来敲命令。要实现这个效果也挺简单,我们创建一个shell脚本来定期执行。
使用vi cleanCache.sh创建一个脚本文件,脚本内容如下:
#!/bin/bash
echo "开始清除缓存"
#缓存数据写入硬盘,防止数据丢失
sync;sync;sync
#延迟10秒后释放缓存空间
sleep 10
sudo bash -c "echo 1 > /proc/sys/vm/drop_caches"
sudo bash -c "echo 2 > /proc/sys/vm/drop_caches"
sudo bash -c "echo 3 > /proc/sys/vm/drop_caches"
echo "清除缓存结束"
保存脚本文件,使用如下命令给脚本添加执行权限。
chmod +x cleanCache.sh
接下来我们使用如下命令验证脚本的正确性。
./cleanCache.sh
如下图所示脚本文件执行成功。
接下来查看当前目录,找到脚本所在的绝对路径。使用pwd命令查看当前文件路径,如下图所示,我的脚本所在的绝对路径是 /home/centos/script/cleanCache.sh
创建一个系统定时任务,周期性执行清理缓存的脚本。使用下列命令编辑定时任务文件:
crontab -e
在该文件中追加写入如下内容,并保存文件。
*/10 * * * * /home/centos/script/cleanCache.sh
这条命令的意思是每10分钟执行一次脚本。可以使用crontab -l 查看定时任务列表是否保存成功。
还可以使用下列命令查看定时任务的执行记录,如下图所示,我为了测试,设置2分钟执行一次。
sudo cat /var/log/cron | grep cleanCache
这样,系统就可以周期性帮我们自动清理缓存啦,一定程度上解决了系统资源紧缺的问题!