Liunx中 Buff/Cache占比过高解决方法

Liunx中 Buff/Cache占比过高解决方法

一、问题背景

free -h时看到buff/cache占比过高,导致free过低无法正常使用业务服务。

二、参数解释

1.参数对比

            Mem                            Swap

total      系统总的可用物理内存           系统总的可用交换内存

userd      已经被使用的物理内存           已经被使用的交换内存

free       空闲的物理内存                 空闲的交换内存

shared     被共享使用的物理内存           N/A

buff/cache buffer和cache使用的物理内存之和     N/A

available  可用的物理内存大小             N/A

2.free与available区别

free就是真正尚未被使用的物理内存大小;

available就是从应用程度的角度看到的可用内存数量。(Linux内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是buff/cache。当应用程序没有足够的free内存可用,内核就会从buffer和cache中回收一部分内存来满足应用程序的需求。理论上来说available=free+buffer+cache,但实际上available会小于三者之和,因为不是所有的free/buffer都能释放)。

三、解决方案

Linux具有先进的缓存机制,会针对dentry、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作用来提高读写效率。但是在进行了大量文件操作之后,缓存会把内存资源基本用光,虽然文件读取效率提高了,但是物理内存会逐渐被吃光。

因为服务进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches的默认参数设置的就是不释放的。

1.drop_caches含义

drop_caches的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值);1:释放页缓存;2:释放dentries和inodes;3:释放所有缓存。

2.释放命令

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

3.定时脚本

> vim clean.sh
#!/bin/bash#每两小时清除一次缓存
echo "开始清除缓存"
sync;sync;sync #写入硬盘,防止数据丢失
sleep 20#延迟20秒
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

> chmod +x clean.sh
> crontab -e
# 每两小时执行一次
0 */2 * * * /opt/clean.sh

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值