文章目錄
- 一、清理快取的命令:
- 二、詳細解釋
- (一)、Men 與 Swap 的區別
- (二)、buffer 與 cache 的區別
- 三、一鍵清理快取腳本
一、清理快取的命令:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257381.html
標籤:其他
