本文试图用最浅显的语言说明以下问题:
1、free 命令中的buffer/cache 是什么意思?
2、内存回收的机制是什么?
3、内存回收的门限是什么?也就是什么时候进行回收?
4、如何手动清除cache?
1、free 命令中的buffer/cache 是什么意思?
当我们的系统长时间运行一段时间后,执行 free 命令,会发现 buff/cache 占用的内存非常大,这里的 buffer/cache 到底是什么呢?又为什么会变得这么大呢?被它占用内存还能被其它进程正常使用吗?其实buff/cache 是指buffer cache 和 page cache,这里对这两个概念解释一下:
Page Cache
page cache 以page为单位,缓存文件内容。缓存在page cache中的文件数据,能够更快的被用户读取。同时对于带buffer的写入操作,数据在写入到page cache中即可立即返回,而不需等待数据被实际写到到磁盘,进而提高了上层应用读写文件的整体性能。
Buffer Cache
磁盘的最小数据单位为sector,每次读写磁盘都是以sector为单位对磁盘进行操作。
sector大小跟具体的磁盘类型有关,有的为512Byte, 有的为4K Bytes。无论用户是希望读取1个byte,还是10个byte,最终访问磁盘时,都必须以sector为单位读取,如果裸读磁盘,那意味着数据读取的效率会非常低。
同样,如果用户希望向磁盘某个位置写入(更新)1个byte的数据,他也必须整个刷新一个sector,言下之意,则是在写入这1个byte之前,我们需要先将该1byte所在的磁盘sector数据全部读出来,在内存中,修改对应的这1个byte数据,然后再将整个修改后的sector数据,一口气写入磁盘。
为了降低