Victor's Code Journey
Victor's Code Journey

目录

linux命令free

警告
本文最后更新于 2016-12-16,文中内容可能已过时。

free 命令是一个显示系统中空闲和已用内存大小的工具。free 命令的输出和 top 命令相似。大多数Linux发行版已经含有 free 命令。

想要运行,只需在控制台输入free 即可。不带选项运行会显示一个以KB为单位的默认输出。

$ free
 free
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:   263893792    99222360   146860540     4450868    17810892   155716084
交换:   142029816    35339728   106690088
  • total 系统总的可用物理内存大小
  • used 已被使用的物理内存大小
  • free 还有多少物理内存可用
  • shared 被共享使用的物理内存大小
  • buff/cache 被 buffer 和 cache 使用的物理内存大小
  • available 还可以被 应用程序 使用的物理内存大小

free 与 available是不同的:

  • free 是真正尚未被使用的物理内存数量。free = total - buffer -cache - used.
  • available 是应用程序认为可用内存数量。available = free + buffer + cache.

注意:这只是大概的计算方法

Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。

cache是 Linux page缓存的大小,减去swap缓存(SwapCached)的内存(总页面缓存大小为 Cached+ SwapCached)。Linux 通过page cache执行所有文件I/O。

  • 写入被简单地实现为将page cache中的相应page标记为脏;然后,异步刷新程序线程会定期将任何脏页写回磁盘。
  • 读取是通过从page cache返回数据来实现的;如果数据尚未在缓存中,则首先填充该数据。

在现代 Linux 系统上,缓存很容易达到几千兆字节。它只会在响应内存压力时收缩。系统将清除页面缓存,同时将数据交换到磁盘,以便根据需要提供更多内存。

bugger 是内存中块 I/O 缓冲区。它们的寿命相对较短。缓冲区是原始磁盘块,不在页面缓存中表示,即不是文件数据。缓冲区指标的重要性最低。在大多数系统上,缓冲区通常只有几十兆字节。

在 Linux 内核版本 2.4 之前,Linux 具有单独的页面和缓冲区缓存。从 2.4 开始,页面和缓冲区缓存是统一的.

free 支持通过参数控制内存单位.

## 以bytes为单位来显示内存的信息。
free -b
## 以kb为单位来显示内存的信息。
free -k 
## 以mb为单位来显示内存的信息。
free -m
## 以gb为单位来显示内存的信息。
free -g

以适于人类可读方式显示内存信息。-h与其他命令最大不同是-h选项会在数字后面加上适于人类可读的单位

$ free -h
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:       251Gi        94Gi       139Gi       4.3Gi        17Gi       148Gi
交换:       135Gi        33Gi       101Gi

可以每隔N秒打印一次内存信息,直到用ctrl+c结束

$ free -s N

可以重复打印内存信息N次

$ free -c N

free 命令本质上是读取文件/proc/meminfo的信息。这也会带来一些问题。例如docker中的free命令通常是不准确的。

相关内容