最近在做监控项目的时候,有同事跟我说“你看Linux性能也不好嘛,内存使用率总是达到80%,我在windows下也没这种状况”,我跟他解释,因为Linux系统,是尽可能的使用内存,内存不是拿来看的,是需要拿来用的,而对于windows,无论你的windows内存是多少,它还是会用硬盘交换文件来读(即使内存空间还有很多空余),而对于Linux,在查看内存使用率的时候,只要没有用到swap空间,我们就认为内存暂时不会紧缺。

 Linux平台中页面缓存的行为策略,即Linux将尽可能地利用更多的内存来转送页面缓存,换而言之:

无论在磁盘上读取什么数据,只要该数据在页面缓存上不存在,并且有空余的内存空间,就在页面缓存中建立新的缓存(而不是替代旧的缓存)。

那Linux下的buffer与cache到底是什么?又有什么区别了,下面我们简单做下介绍。

[root@kvm02 postfix]# free -m

              total        used        free      shared  buff/cache   available

Mem:           3774         375        2592           9         807        3106

Swap:          3967           0        3967

可以内存=free+buffers+cached

buffer:缓冲将数据缓冲下来,解决速度慢和快的交接问题;速度快的需要通过缓冲区将数据一点一点
传给速度慢的区域。例如:从内存中将数据往硬盘中写入,并不是直接写入,而是缓冲到一定大小之后
刷入硬盘中。
A buffer is something that has yet to be "written" to disk.
cache:缓存实现数据的重复使用,速度慢的设备需要通过缓存将经常要用到的数据缓存起来,缓存下
来的数据可以提供高速的传输速度给速度快的设备。例如:将硬盘中的数据读取出来放在内存的缓存区
中,这样以后再次访问同一个资源,速度会快很多。
A cache is something that has been "read" from the disk and stored for later use.

小结:

a、buffer是用于存放将要输出到disk(块设备)的数据,而cache是存放从disk上读出的数据。二者
都是为提高IO性能而设计的。
b、从本质上讲,Buffer是“缓冲”,而Cache是“缓存”,即Buffer中的数据是一定要在短时间内被
处理的,而Cache则可以作为一个数据的长期的容器而其中的数据不一定非要被立刻处理
c、# cat /proc/sys/vm/drop_caches
0 //默认是0;1-清空页缓存;2-清空inode和目录树缓存;3-清空所有缓存
echo 3>/proc/sys/vm/drop_caches



参考资料:https://www.zhihu.com/question/26190832