这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
命令简介
free
命令主要用于显示系统的 屋里内存、已用与空闲内存的总和、交换区内存、已用与空闲交换区内存的总和,以及 系统内核使用的缓冲区 等信息。
注意,free
命令输出的共享内存(shard)一列已无意义,可以忽略。
此外,上述信息可以从 /proc/meminfo
文件中获得,free
命令实际上也是从这个文件中读取数据的。
命令格式
free [参数]
命令参数
命令 | 介绍 |
---|---|
-b | 以 B(字节)为单位,显示内存的数量。 |
-g | 以 GB 为单位,显示内存的数量。 |
-k | 以 KB 为单位,显示内存的数量(默认)。 |
-l | 显示低端内存与高端内存的详细统计数据。 |
-m | 以 MB 为单位,显示内存的数量。 |
-o | 禁止显示缓冲区调整一行。如果未指定 -o 选项,free 将从 used 字段的占用内存中减去缓冲区内存,把缓冲区内存加到空闲内存中。 |
-s delay | 以指定的时间 delay 为时间间隔(单位秒),连续的显示内存信息。 |
-t | 增加一行包含已用内存与空闲内存合计的信息。 |
-V | 显示命令的版本信息,然后正常退出。 |
输出字段
# free
total used free shared buff/cache available
Mem: 2097152 121568 1688124 2016 287460 1975584
Swap: 0 0 0
total
:总计物理内存的大小。used
:已使用的物理内存的大小。free
:可用的物理内存的大小。Shard
:多个进程共享的内存总额。buff/cache
:被缓冲区和缓存占用的内存大小。abailable
:该项是新版的free
中增加的一项,表示可用内存大小。
free 深入学习
available 含义
availavle
简单理解为是系统的可用内存。我们知道,当一个应用程序需要更大的内存空间时,操作系统可以回收 buffer
和 cache
的空间以提供给应用程序使用,加上原来的 free
值(即空闲内存值),一起组成了可用的内存值,可以理解为:available = free + buffer + cache
。
但更严谨来说,buffer
和 cache
的内存块并不是可以完全被回收的,有一部分是无法回收的,比如共享内存段、ramfs 等,具体大家可以参考 Linux 的一些官方文档,因此更确切地说,available的计算方式就可以表示为:
available = free + buffer + cache - 不可回收的部分
新旧 free 命令对比
在旧的版本中,free
命令下面的值是有三行的,具体如下:
total used free shared buff/cache available
Mem: 2097152 121568 1688124 2016 287460 1975584
-/+ buffers/cache 0 0
Swap: 0 0 0
而新版本中,free
命令的结果合并了 buffer/cache
作为新的一列,并且在此基础上增加了 available
一列,因此显得更直观一些。
Swap Space
Linux 支持虚拟内存(virtual memory),虚拟内存是指使用磁盘当作 RAM 的扩展,这样可用的内存的大小就相应地增大了。内核会将暂时不用的内存块的内容写到硬盘上,这样一来,这块内存就可用于其他目的。当需要用到原始的内容时,他们被重新读入内存。这些操作对用户来说是完全透明的;Linux 下运行的程式只是看到有大量的内存可供使用而并没有注意到是不是他们的一部分是驻留在硬盘上的。当然,读写硬盘要比直接使用真实内存慢得多(要慢数千倍),所以程式就不会像一直在内存中运行的那样快。用作虚拟内存的硬盘部分被称为交换空间(Swap Space) 。
有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这种情况是有可能发生的,例如如果在某一时刻有进行交换的必要,但后来一个占用非常多物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。