高效安全地清理Linux中的缓存

一、清理缓存的命令:

free -h/-m                               #查看目前内存使用情况
#也可筛选计算出剩余内存百分比,如下:
free -m | sed -n '2p' | awk '{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}'
 
echo 1 > /proc/sys/vm/drop_caches     #释放页缓存
 
echo 2 > /proc/sys/vm/drop_caches     #释放dentries和inodes缓存
 
echo 3 > /proc/sys/vm/drop_caches     #是释放 1  2 中说道的的所有缓存

二、详细解释

使用 free -h 查看内存使用情况时:
在这里插入图片描述

(一)、Men 与 Swap 的区别

第1列 Mem
物理内存使用情况

total used free shared buff/cache available
物理内存总容量 已使用内存容量 空闲内存容量 共享内存容量 缓存容量 可用内存容量

从图中的值可以看出,total≠used+free,而是total≈used+available;而
free:是实际未使用的物理内存容量
available:是应用程序认为可用的内存容量,available≈free+buff/cache,关键就是buff/cache这部分。

第2列 Swap
交换区内存使用情况

total used free
交换分区总容量 交换分区使用容量 交换分区空闲容量

(二)、buffer 与 cache 的区别

1、buffer和cache都是为了解决互访的两种设备存在速率差异,使磁盘的I/O的读写性能或cpu更加高效,减少进程间通信等待的时间

2、buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据,通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储快的设备先把数据缓存到buffer上,等到系统统一把buffer上的数据写到速度慢的设备上。常见的有把内存的数据往磁盘进行写操作,这时你可以查看一下buffers

3、cache:缓存区,用于对读取速度比较严格,却因为设备间因为存储设备存在速度差异,而不能立刻获取数据,这时cache就会为了加速缓存一部分数据。常见的是CPU和内存之间的数据通信,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而Cache保存着CPU刚用过的数据或循环使用的部分数据,这时Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。

三、一键清理缓存脚本

#!/bin/bash
#Men分区内存总量 
mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`

#Men分区当前剩余内存的大小 
mem_free=`free -m | awk 'NR==3' | awk '{print $4}'`

#Men分区当前已使用内存的大小 
mem_used=`free -m | grep Mem | awk '{print  $3}'`

if (($mem_used != 0)); then

#如果已被使用,则计算当前剩余free所占总量,表示为整数
mem_per=`free -m | awk '/Mem:/ {print int($3/($3+$4)*100)"%"}'`
mem_total=`free -m | awk '/Mem:/ {print int($3/($3+$4)*100)}'`
#设置监控日志监控内存使用情况
DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per"
echo $DATA >> /var/log/mem_alarm.log

#当前剩余百分比与80%进行比较 ,超过80%进行缓存清理
if [ $mem_total -gt 80 ]; then
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

else
echo "Don't have to clean up"

#将release memory OK !写入/var/log/文件夹的memstat_日期.log日志中
echo "--->release memory OK ! " >>/var/log/memstat_$(date +%Y%m%d_%H%M%S).log
fi
fi

猜你喜欢

转载自blog.csdn.net/Gengchenchen/article/details/113701832
今日推荐