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.定时脚本


#!/bin/bash

Mem=$(free -m | awk 'NR==2' | awk '{print $4}')

if [ $Mem -gt 1024 ];

     then

echo "Service memory capacity is normal!" > /dev/null

     else

sync

echo "1" > /proc/sys/vm/drop_caches

echo "2" > /proc/sys/vm/drop_caches

echo "3" > /proc/sys/vm/drop_caches

sync

 

posted @ 2023-05-18 14:56  CharyGao  阅读(7614)  评论(1)    收藏  举报