linux命令free
free 命令是一个显示系统中空闲和已用内存大小的工具。free 命令的输出和 top 命令相似。大多数Linux发行版已经含有 free 命令。
想要运行,只需在控制台输入free 即可。不带选项运行会显示一个以KB为单位的默认输出。
1 | $ free |
- total 系统总的可用物理内存大小
- used 已被使用的物理内存大小
- free 还有多少物理内存可用
- shared 被共享使用的物理内存大小
- buff/cache 被 buffer 和 cache 使用的物理内存大小
- available 还可以被 应用程序 使用的物理内存大小
free 与 available是不同的:
- free 是真正尚未被使用的物理内存数量。
- available 是应用程序认为可用内存数量。available = free + buffer + cache
free = total - buffer -cache - used; available = free + buffer + cache; 注:只是大概的计算方法
Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。
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 支持通过参数控制内存单位.
1 | # 以bytes为单位来显示内存的信息。 |
以适于人类可读方式显示内存信息。-h与其他命令最大不同是-h选项会在数字后面加上适于人类可读的单位
1 | $ free -h |
可以每隔N秒打印一次内存信息,直到用ctrl+c结束
1 | $ free -s N |
可以重复打印内存信息N次
1 | $ free -c N |
/proc/meminfo
free 命令本质上是读取文件/proc/meminfo
的信息。这也会带来一些问题。例如docker中的free命令通常是不准确的。