场景:某次查看服务器的内存使用情况时,发现buff/cache高得吓人
手动执行命令
在执行这三条命令之前一定要先执行sync命令
描述:sync 命令运行sync子例程。如果必须停止系统,则运行sync命令以确保文件系统的完整性
# 清除pagecache
sync && echo 1 > /proc/sys/vm/drop_caches
# 清除回收slab分配器中的对象(包括目录项缓存和inode缓存)
# slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache
sync && echo 2 > /proc/sys/vm/drop_caches
# 清除pagecache和slab分配器中的缓存对象
sync && echo 3 > /proc/sys/vm/drop_caches
定时清除过大buff/cache脚本
#!/bin/bash
USED_CURRENT=`free -m | awk 'NR==2' | awk '{print $3}'`
FREE_CURRENT=`free -m | awk 'NR==2' | awk '{print $4}'`
# crontab定时任务不能使用绝对路径,不会自动执行
TARGETFILE='/home/mocha/桌面/cleanCache.log'
DATETIME=$(date +"%Y年%m月%d日 %H时%M分")
echo "===========================" >> $TARGETFILE
echo "执行清空缓存时间 ${DATETIME}" >> $TARGETFILE
echo "清理缓存前: | [Used:${USED_CURRENT}MB][Free:${FREE_CURRENT}MB]" >> $TARGETFILE
if [ $FREE_CURRENT -le 300 ]
then
sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches
USED_CLEAN=`free -m | awk 'NR==2' | awk '{print $3}'`
FREE_CLEAN=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "清理缓存后: | [Used:${USED_CLEAN}MB][Free:${FREE_CLEAN}MB]" >> $TARGETFILE
else
echo "不需要清理缓存" >> $TARGETFILE
fi
echo "===========================" >> $TARGETFILE
使用crontab实现定时执行任务
# 表示每天的6点00分执行该脚本
[root@centos7 backup]# crontab -e
00 6 * * * /home/mocha/桌面/cleanCache.sh
脚本命令说明
# NR==1 定位在file的第一行
# print $1 显示第一列内容
awk 'NR==1{print $1}' file
# 以M为单位进行输出
free -m
total used free shared buff/cache available
Mem: 1839 1101 489 0 248 583
Swap: 0 0 0
# 当free变量的值小于等于60000时,条件成立
$free -le 60000