在 Linux 系统中,buff/cache 是指缓冲区和缓存内存。它们的主要作用是提高系统性能,减少磁盘 I/O 操作次数。

Buffer Cache:Buffer(缓冲区)用于缓存尚未写入磁盘的数据。它主要用于块设备的写操作。例如,当你对一个文件进行写操作时,数据会先写入缓冲区,然后再批量写入磁盘。

Page Cache:Cache(缓存)用于缓存从磁盘读取的数据。它主要用于文件系统的读操作。例如,当你读取一个文件时,数据会被缓存到内存中,以便下次读取时更快。

问题描述

在Ubuntu24.04虚拟机中编译openwrt固件的时候,发现虚拟机越来越卡,经过top检查之后发现cpu占用率并不高,就怀疑是内存可能不够,使用free -h查看果然如此:

$ free -h
               total        used        free      shared  buff/cache   available
Mem:            11Gi       2.4Gi       373Mi       1.5Mi       9.2Gi       9.3Gi
Swap:          4.0Gi        12Ki       4.0Gi

解决方案

手动清理缓存

可以使用以下命令来手动清理缓存:

sync; sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

调整缓存回收频率

可以通过调整 vm.vfs_cache_pressure 参数来控制缓存的回收频率。值越大,回收频率越高:

sudo sh -c "echo 200 > /proc/sys/vm/vfs_cache_pressure"