linux清理图片缓存,高效安全地清理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 查看内存使用情况时:

b4ae483ac31089c557f99834d526839e.png

(一)、Men 与 Swap 的区别

第1列 Mem

物理内存使用情况

totalusedfreesharedbuff/cacheavailable物理内存总容量已使用内存容量空闲内存容量共享内存容量缓存容量可用内存容量

从图中的值可以看出,total≠used+free,而是total≈used+available;而

free:是实际未使用的物理内存容量

available:是应用程序认为可用的内存容量,available≈free+buff/cache,关键就是buff/cache这部分。

第2列 Swap

交换区内存使用情况

totalusedfree交换分区总容量交换分区使用容量交换分区空闲容量

(二)、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

你可能感兴趣的:(linux清理图片缓存)