Linuxのキャッシュを効率的かつ安全にクリアする

1.キャッシュをクリーンアップするコマンド:

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 中说道的的所有缓存

2.詳細な説明

free -hを使用してメモリ使用量を表示する場合:
ここに画像の説明を挿入

(1)男性とスワップの違い

列1
メモリの物理メモリ使用量

合計 中古 自由 共有 バフ/キャッシュ 利用可能
総物理メモリ容量 使用メモリ容量 空きメモリ容量 共有メモリ容量 キャッシュ容量 利用可能なメモリ容量

図の値からわかるように、total≠used + freeですが、total≈used+ available;および
free:使用可能な実際の未使用の物理メモリ容量
です:アプリケーションは、使用可能なメモリ容量、available≈free+ buff /を考慮します。キャッシュ、キーはバフ/キャッシュ部分です。

列2スワップ
スワップ領域のメモリ使用量

合計 中古 自由
スワップパーティションの合計容量 パーティションの使用容量を交換します スワップパーティションの空き容量

(2)バッファとキャッシュの違い

1.バッファとキャッシュの両方が、相互アクセスのための2つのデバイスのレートの違いを解決し、ディスクI / OまたはCPUの読み取りと書き込みのパフォーマンスをより効率的にし、通信の待機時間を短縮します。プロセス間

2.バッファ:バッファ。ストレージ速度が同期していないデバイス間または優先度の異なるデバイス間でデータを転送するために使用されます。バッファを使用すると、プロセス間通信の待機時間を短縮できます。ストレージ速度が速く、ストレージ速度が遅い場合高速ストレージデバイスは最初にデータをバッファにキャッシュし、システムがバッファ上のデータを低速デバイスに均一に書き込むまで待機します。通常、メモリ内のデータはディスクに書き込まれますが、この時点でバッファを確認できます

3.キャッシュ:キャッシュ領域は読み取り速度を制限するために使用されますが、ストレージデバイス間の速度差のため、データをすぐに取得することはできません。このとき、キャッシュは速度を上げるためにデータの一部をキャッシュします。 。一般的なのは、CPUとメモリ間のデータ通信です。CPUの速度はメインメモリの速度よりもはるかに速いため、CPUがメモリからデータを読み取るのに長い時間がかかり、キャッシュがデータを保存します。またはサイクルで使用されるデータの一部である場合、データはキャッシュでより高速に読み取られます。これにより、CPUの待機時間が短縮され、システムのパフォーマンスが向上します。

キャッシュされたスクリプトの3つのワンクリッククリーンアップ

#!/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