Buff/Cache概念和清理方法

最近在工作中遇到了LInux系统中Buff/Cache过大的问题,从网上查找资料,了解不释放的原因。

buff/cache占用比较大的原因分析:频繁存取文件会导致内存文件被用光,即便是程序结束后,也不会被正常释放,这就会导致buffer和cache占用比较高。

free -h

total:是指计算机总物理内存。

used:已用的内存。

free:空余的内存。

shared:被多个进程共享的内存。

buffers:用于存放到输出到disk(块存储)的数据,在这里buff是指被OS buff住的内存。

cached: 存放从disk上读出的数据,buff和cache是为了提高IO性能并由OS管理的。

我们可以使用下面的命令进行清理:

1)清理pagecache(页面缓存)
echo 1 > /proc/sys/vm/drop_caches或sysctl -w vm.drop_caches=1

2)清理dentries(目录缓存)和inodes
echo 2 > /proc/sys/vm/drop_caches或sysctl -w vm.drop_caches=2

3)清理pagecache、dentries和inodes
echo 3 > /proc/sys/vm/drop_caches或sysctl -w vm.drop_caches=3

编写脚本如下:

#!/bin/bash
#
#
sync;sync;sync
sleep(10)
echo 3 > /proc/sys/vm/drop_caches

可见:Buff/Cache被清理。