高效安全地清理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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章