Linux中buff/cache内存占用过高-手动清除释放内存

buff/cache内存占用太高
我们在使用free -h或者(top命令)查看系统内存的时候,有时间会发现buff/cache很高,如下图:

可以看到总内存就64G,buff/cache占用了25G。

什么是buff
buff(Buffer Cache)是一种I/O缓存,用于内存和硬盘的缓冲,是io设备的读写缓冲区。
 
什么是cache
cache(Page Cache)是一种高速缓存,用于CPU和内存之间的缓冲 ,是文件系统的cache。把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。它们都是占用内存。两者都是RAM中的数据。
 
buff和cache
简单来说,buff是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
 
1、手动清除buff/cache
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
 
#sync:将所有未写的系统缓冲区写到磁盘中
#echo 1 > /proc/sys/vm/drop_caches:清除page cache
#echo 2 > /proc/sys/vm/drop_caches:清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
#echo 3 > /proc/sys/vm/drop_caches:清除pagecache和slab分配器中的缓存对象。
#/proc/sys/vm/drop_caches的值,默认为0
 
清除buff/cache后

 

 

 
定时脚本:
#!/bin/bash
TIME=`date "+%Y-%m-%d"`
echo ""
echo ""
echo "======${TIME}开始清除缓存======"
sync;sync;sync #写入硬盘,防止数据丢失
sleep 10 #延迟10秒
echo 3 > /proc/sys/vm/drop_caches
echo "======${TIME}清除缓存完成======"
 
 
posted @   Gao_D  阅读(7903)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示