写点什么

Linux 中 buff-cache 占用过高解决方案

用户头像
入门小站
关注
发布于: 2 小时前

我们在使用free -h查看系统内存的时候,有时间会发现buff/cache很高


> free -h
复制代码



available 表示应用程序可以申请到的内存

什么是 buff

buff(Buffer Cache)是一种 I/O 缓存,用于内存和硬盘的缓冲,是 io 设备的读写缓冲区。根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

什么是 cache

cache(Page Cache)是一种高速缓存,用于 CPU 和内存之间的缓冲 ,是文件系统的 cache。把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。


它们都是占用内存。两者都是 RAM 中的数据。简单来说,buff 是即将要被写入磁盘的,而 cache 是被从磁盘中读出来的。


目前进程正在实际被使用的内存的计算方式为used-buff/cache,通过释放 buff/cache 内存后,我们还可以使用的内存量free+buff/cache。通常我们在频繁存取文件后,会导致 buff/cache 的占用量增高。

清除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:将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件

  • 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

定时任务清除

> vim clean.sh#!/bin/bash#每两小时清除一次缓存echo "开始清除缓存"sync;sync;sync #写入硬盘,防止数据丢失sleep 20#延迟20秒echo 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_cachesecho 3 > /proc/sys/vm/drop_caches
> chmod +x clean.sh> crontab -e# 每两小时执行一次0 */2 * * * /opt/clean.sh
复制代码


  • 设置 crond 启动以及开机自启

  • systemctl start crond.service

  • systemctl enable crond.service


原文链接:https://rumenz.com/rumenbiji/linux-buff-cache.html

微信公众号:入门小站

发布于: 2 小时前阅读数: 3
用户头像

入门小站

关注

还未添加个人签名 2020.01.18 加入

还未添加个人简介

评论

发布
暂无评论
Linux中buff-cache占用过高解决方案