Linux命令 free
free命令
free
命令可以显示Linux
系统中空闲的、已用的物理内存及swap
内存,及被内核使用的buffer
。
命令语法说明
1 | # 命令格式 |
输出参数说明
1 | #显示所有的内存信息,每隔两秒显示一次,一共显示两次 |
先对上面红框中的数据做下说明。Men表示具体的物理内存,free从多个维度统计了物理内存的情况,每个维度的含义如下:
- total:总计物理内存的大小。
- used:已使用的物理内存的大小。
- free:可用物理内存有多少。
- shared:多个进程共享的内存总额。
- buffers:写入磁盘内存缓冲区的大小(经常进行磁盘IO的效率比较低,所以先将要写入磁盘的文件进行一定数量的缓冲,等缓冲数据到达一定大小是一次性写进磁盘,提升效率)
- cached:从磁盘中读取内容的缓存大小(原理差不多)。
- available:下面会介绍。
- -buffers/cache:表示被程序实实在在吃掉的内存,比如上图中used内存是5.5G,但是真正被应用程序使用的内存才1.8G,其他被占据的内存主要用来cache数据了,也就是上面的3.5G。
- +buffers/cache:表示应用程序还可以可以申请的内存总数。
free参数和available参数的区别
在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?
free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。
Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。
当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。
但是上面的available参数为什么输出是0呢?请看官方文档的说明
The -a switch shows the available memory (if supported by the running kernel and enabled with sysctl -w vm.meminfo_legacy_layout=0 ; shows zero when unsupported or disabled). The produced output is wider than 80 characters.
这个参数的输出需要操作系统内核支持,如果内核不支持的话就固定输出一个0。