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 Mem
실제 메모리 사용량

합계 익숙한 비어 있는 공유 버프 / 캐시 유효한
총 물리적 메모리 용량 사용 된 메모리 용량 여유 메모리 용량 공유 메모리 용량 캐시 용량 사용 가능한 메모리 용량

그림의 값에서 알 수 있듯이 total ≠ used + free이지만 total≈used + available; 및
free : 사용
가능한 실제 사용되지 않은 물리적 메모리 용량입니다 . 응용 프로그램은 사용 가능한 메모리 용량을 고려합니다. 사용 가능한 ≈free + buff / 캐시에서 핵심은 버프 / 캐시 부분입니다.

열 2
스왑 영역 메모리 사용량

합계 익숙한 비어 있는
총 스왑 파티션 용량 파티션 사용 용량 스왑 스왑 파티션의 여유 용량

(2) 버퍼와 캐시의 차이점

1. 버퍼와 캐시 모두 상호 액세스를위한 두 장치의 속도 차이를 해결하고 디스크 I / O 또는 CPU의 읽기 및 쓰기 성능을보다 효율적으로 만들고 통신 대기 시간을 줄입니다. 프로세스 사이

2. 버퍼 : 버퍼, 저장 속도가 동기화되지 않은 장치 또는 우선 순위가 다른 장치간에 데이터를 전송하는 데 사용됩니다. 버퍼를 통해 프로세스 간 통신 대기 시간을 줄일 수 있습니다. 저장 속도가 빠르고 저장 속도가 느린 경우 통신시, 고속 저장 장치는 먼저 데이터를 버퍼에 캐시하고 시스템이 버퍼의 데이터를 저속 장치에 균일하게 쓸 때까지 기다립니다. 일반적으로 메모리의 데이터는 디스크에 기록되며 이때 버퍼를 확인할 수 있습니다.

3. 캐시 : 캐시 영역은 읽기 속도를 제한하는 데 사용되지만 저장 장치 간의 속도 차이로 인해 데이터를 즉시 가져올 수 없으며 이때 캐시는 속도를 높이기 위해 데이터의 일부를 캐시합니다. . Common은 CPU와 메모리 간의 데이터 통신입니다. CPU의 속도가 메인 메모리의 속도보다 훨씬 빠르기 때문에 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