free -h命令可以查看内存的使用情况
[root@zabbix-server ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 432M 894M 10M 492M 1.2G
Swap: 2.0G 0B 2.0G
为什么free 比 available要小?
free = total - used - shared - buff/cache
available=total -used
为什么需要buff/cache?
计算机三大核心组件:cpu,内存,硬盘
cpu的吞吐量每秒可以达到1000G以上
每秒可以写入1000G的数据,同时可以往外吐1000G的数据
内存的吞吐率比cpu要低很多,虽然比cpu吞吐率低,但是也有每秒几千MB/s
硬盘的吞吐率:例如sata接口的硬盘吞吐率最大600MB/s ,
硬盘上存储了大量的程序,一个程序要执行,首先要把数据从硬盘读到内存,然后从内存读到CPU,cpu进行逻辑运算,然后将运算结果返回给内存,内存再写入硬盘,CPU是不能直接从硬盘读取数据的,原因之一就是CPU和硬盘之间的吞吐率差距太大了,CPU直接从硬盘读取数据效率太低了,此外,CPU在进行运算的时候是有会产生很多临时数据的,如果CPU先把数据写到内存再写到硬盘,内存中是有回收机制的,会自动清理掉临时数据,如果直接写入硬盘,那么临时数据也会写入硬盘保存起来,要清理只能手动清理,种种原因下,CPU是不会直接写数据到硬盘的。
虽然CPU不直接将数据写入硬盘,但是CPU,内存,硬盘之间的吞吐率还是十分不对等,于是buff和cache就发挥了作用。
内存的吞吐率由几千MB/s,而硬盘(sata)的吞吐率600M/s,内存往硬盘里面写数据的时候,处在内存和硬盘之间的buff缓冲区就起到了作用,内存往外吐数据的速度是很快的,硬盘往里面写的数据是很慢的,如果直接写的话肯定是会堵塞的,假设内存往硬盘写数据的速度是6000MB/s而硬盘往里面写数据的速度是600MB/s,那么数据肯定是不能及时写入的,如果一直就这么等待写入,数据是肯定有丢失的风险的,buff缓冲区就起到了一个水池的作用,内存先将数据写入缓冲区,然后再慢慢的写入硬盘,当然buff缓冲区的容量也是有极限的,如果一个程序产生了大量的数据将缓冲区也填满了的话,那就只能等待慢慢写入了。所以buff缓冲区就在内存和硬盘之间的一个不同吞吐率起到了一个平衡作用。
cache缓存区与buff缓冲区的方向相反, 内存写入数据的速度是很快的,但是硬盘往外面吐数据的数据相对来说还是比较慢的,如果内存一直等着硬盘将程序的数据读出来,那么程序就会一直处于等待状态,程序就会处于很卡的状态,影响程序的执行效率,cache缓存就是为了解决这个问题的,将经常需要从硬盘中读出的数据提前将它放到cache缓存区里面,然后内存需要数据的时候直接从cache缓存区获取数据,这样就能降低内存载入数据的时间,从而提高程序的执行效率。