一、free命令作用
在大多数Linux发行版中都可以通过 free 命令来查看显示系统内存状态,该命令主要会汇总出包括系统物理内存、swap 交换分区、共享内存和系统缓存的使用情况。这些数据主要是从/proc/meminfo中读出并解析得到。
可以通过free –help 查看该命令的使用方法,也可以通过man free查看该命令的详细操作手册。
二、使用示例
1 | [root@docker-registry ~]# free -h |
参数解析
1 | total 是物理内存大小; |
available和free的区别
可用内存=系统free memory+buff/cache。free是系统中空闲的内存大小,buff/cache虽然是在需要的时候可以回收的,但是当前也是被利用状态,available统计的是应用程序可用内存空间,buff/cache是可回收,可被应用程序使用的。从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
buff/cache机制
buff/cache是为了协调内存与磁盘文件读写IO速率差异性、提高系统的工作效率而设计的。
cache
cache 就是缓存的意思。当系统读文件的时候,是把数据从硬盘读到内存里,因为硬盘比内存慢很多,所以这个过程会很耗时。为了提高效率,linux 会把读进来的文件在内存中缓存下来,供程序接下来使用,即使程序结束,cache 也不会被自动释放,系统会根据换出算法把cache缓存置换出去。所以如果有程序进行大量的读文件操作,内存使用率也会相应的提高。
buffer
buffer 和 cache 相近,稍有区别。考虑内存写文件到硬盘的过程,内存和磁盘的IO差距很大,如果内存要等待数据写完之后才继续后面的操作,会影响程序的运行速度,也会降低系统的相应。所以系统设计了 buffer,写到硬盘的数据会放到 buffer 里面,内存很快把数据写到 buffer,可以继续其他的工作,而硬盘可以在后台慢慢读出 buffer 中的数据,保存起来。这样就提高了读写的效率。
以下对cache做一个验证,在有cache的情况下,读写IO会快很多:
1 | [root@docker-registry test]# time dd if=/dev/zero of=test.log bs=1M count=500 |
1 | [root@docker-registry test]# time dd if=test.log of=/dev/zero bs=1M count=500 |
观察 buffer/cache
1 | [root@docker-registry test]# free -h |
然后手动清理一下 cache:
echo 1 > /proc/sys/vm/drop_caches
1 | [root@docker-registry test]# free -h |
然后再操作该文件,可见慢很多
1 | [root@docker-registry test]# time dd if=test.log of=/dev/zero bs=1M count=500 |
以上,可看到buff/cache对IO的的提升还是很明显的。