每天一个 Linux 命令(6)—— free

178 阅读4分钟

这是我参与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)

有时,尽管有许多的空闲内存,仍然会有许多的交换空间正被使用。这种情况是有可能发生的,例如如果在某一时刻有进行交换的必要,但后来一个占用非常多物理内存的大进程结束并释放内存时。被交换出的数据并不会自动地交换进内存,除非有这个需要时。此时物理内存会在一段时间内保持空闲状态。

参考文档