Linux 云服务器 buff/cache 占用过多
0、问题介绍
在Linux下经常会遇到buff/cache内存占用过多问题,尤其是使用云主机的时候最严重,由于很多是虚拟内存,因此如果buff/cache占用过大的,free空闲内存就很少。
普通机器:total=used+free
虚拟机器:total=used+free+buff/cache
1、手动解决
依次运行以下命令:
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
注意:在执行这三条命令之前一定要先执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-Node、已延迟的块 I/O 和读写映射文件)
2、定时任务
新建 shell 脚本 releasemem.sh:
used=`free -m | awk 'NR==2' | awk '{print $3}'`
free=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "===========================" >> /home/jobs/log.log
date >> /opt/anso/jobs/log.log
echo "Memory usage before | [Use:${used}MB][Free:${free}MB]" >> /home/jobs/log.log
if [ $free -le 60000 ] ; then
sync && echo 1 > /proc/sys/vm/drop_caches
sync && echo 2 > /proc/sys/vm/drop_caches
sync && echo 3 > /proc/sys/vm/drop_caches
used_ok=`free -m | awk 'NR==2' | awk '{print $3}'`
free_ok=`free -m | awk 'NR==2' | awk '{print $4}'`
echo "Memory usage after | [Use:${used_ok}MB][Free:${free_ok}MB]" >> /home/jobs/mem.log
echo "OK" >> /home/jobs/log.log
else
echo "Not required" >> /home/jobs/log.log
fi
exit 1
加入定时任务:
crontab -e #编辑当前用户定时任务
#输入:*/1 * * * * sh opt/anso/jobs/freemem.sh 保存
crontab -l #查看是否创建成功
service crond restart #重启crond服务
service crond status #查看crond服务是否重启成功