free命令中buff-cache占满内存的问题
在 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"
- 原文作者:生如夏花
- 原文链接:https://blduan.top/post/%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5/free%E5%91%BD%E4%BB%A4%E4%B8%ADbuff-cache%E5%8D%A0%E6%BB%A1%E5%86%85%E5%AD%98%E7%9A%84%E9%97%AE%E9%A2%98/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。