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