free 命令能够显示 Linux 零碎中闲暇的、已用的物理内存及 swap 内存, 及被内核应用的 buffer。在 Linux 系统监控的工具中,free 命令是最常常应用的命令之一。
命令格局
free [参数]
命令性能
free
命令显示零碎应用和闲暇的内存状况,包含物理内存、交互区内存 (swap) 和内核缓冲区内存。共享内存将被疏忽.
命令参数
- -b 以 Byte 为单位显示内存应用状况。
- -k 以 KB 为单位显示内存应用状况。
- -m 以 MB 为单位显示内存应用状况。
- -g 以 GB 为单位显示内存应用状况。
- -o 不显示缓冲区调节列。
- -s< 距离秒数 > 继续察看内存应用情况。
- -t 显示内存总和列。
- -V 显示版本信息。
显示内存应用状况
输入简介
- Mem 行 (第二行) 是内存的应用状况。
- Swap 行 (第三行) 是替换空间的应用状况。
- total 列显示零碎总的可用物理内存和替换空间大小。
- used 列显示曾经被应用的物理内存和替换空间。
- free 列显示还有多少物理内存和替换空间可用应用。
- shared 列显示被共享应用的物理内存大小。
- buff/cache 列显示被 buffer 和 cache 应用的物理内存大小。
- available 列显示还能够被应用程序应用的物理内存大小。
buffers 和 cached 都是缓存,两者有什么区别
先来提一个问题:buffer 和 cache 应该是两种类型的内存,然而 free 命令为什么会把它们放在一起呢?要答复这个问题须要咱们做些筹备工作。让咱们先来搞清楚 buffer 与 cache 的含意。
为了进步磁盘存取效率, Linux 做了一些精心的设计, 除了对 dentry 进行缓存 (用于 VFS, 减速文件路径名到 inode 的转换), 还采取了两种次要 Cache 形式:Buffer Cache 和 Page Cache。前者针对磁盘块的读写,后者针对文件 inode 的读写。这些 Cache 无效缩短了 I/ O 零碎调用(比方 read,write,getdents) 的工夫。
buffer 在操作系统中指 buffer cache,中文个别翻译为 “ 缓冲区 ”。要了解缓冲区,必须明确另外两个概念:” 扇区 ” 和 “ 块 ”。扇区是设施的最小寻址单元,也叫 “ 硬扇区 ” 或 “ 设施块 ”。块是操作系统中文件系统的最小寻址单元,也叫 “ 文件块 ” 或 “I/O 块 ”。每个块蕴含一个或多个扇区,但大小不能超过一个页面,所以一个页能够包容一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的示意:
留神,buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块间接搬到内存中而不关怀块中到底寄存的是什么格局的文件。
cache 在操作系统中指 page cache,中文个别翻译为 “ 页高速缓存 ”。页高速缓存是内核实现的磁盘缓存。它次要用来缩小对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的拜访变为对物理内存的拜访。页高速缓存缓存的是内存页面。缓存中的页来自对一般文件、块设施文件 (这个指的就是 buffer cache 呀) 和内存映射文件的读写。
页高速缓存对一般文件的缓存咱们能够这样了解:当内核要读一个文件 (比方 /etc/hosts) 时,它会先查看这个文件的数据是不是曾经在页高速缓存中了。如果在,就放弃拜访磁盘,间接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。而后内核将读来的数据放入页高速缓存中。这种缓存的指标是文件系统能够辨认的文件(比方 /etc/hosts)。
页高速缓存对块设施文件的缓存就是咱们在后面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。缓冲区只不过是一种概念上比拟非凡的页高速缓存罢了
那么为什么 free 命令不间接称为 cache 而非要写成 buff/cache?这是因为缓冲区和页高速缓存的实现并非天生就是对立的。在 linux 内核 2.4 中才将它们对立。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你晓得了这些故事之后,输入中列的名称可能曾经不再重要了。
free 与 available
在 free 命令的输入中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?
free 是真正尚未被应用的物理内存数量。至于 available 就比拟有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了晋升磁盘操作的性能,会耗费一部分内存去缓存磁盘数据,就是咱们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于曾经被应用的内存。当应用程序须要内存时,如果没有足够的 free 内存能够用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的申请。所以从应用程序的角度来说,available = free + buffer + cache。请留神,这只是一个很现实的计算形式,理论中的数据往往有较大的误差。
替换空间(swap space)
swap space 是磁盘上的一块区域,能够是一个分区,也能够是一个文件。所以具体的实现能够是 swap 分区也能够是 swap 文件。当零碎物理内存吃紧时,Linux 会将内存中不常拜访的数据保留到 swap 上,这样零碎就有更多的物理内存为各个过程服务,而当零碎须要拜访 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。替换空间能够在肯定水平上缓解内存不足的状况,然而它须要读写磁盘数据,所以性能不是很高。
当初的机器个别都不太缺内存,如果零碎默认还是应用了 swap 是不是会连累零碎的性能?实践上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置须要将内存中不罕用的数据移到 swap 中去的紧迫水平。这个参数的取值范畴是 0~100,0 通知内核尽可能的不要将内存数据移到 swap 中,也即只有在无可奈何的状况下才这么做,而 100 通知内核只有有可能,尽量的将内存中不常拜访的数据移到 swap 中。在 ubuntu 零碎中,swappiness 的默认值是 60。如果咱们觉着内存短缺,能够在 /etc/sysctl.conf 文件中设置 swappiness:
> vm.swappiness=10
以总和的模式显示内存的应用信息
周期性的查问内存应用信息
原文链接:https://rumenz.com/rumenbiji/…
微信公众号: 入门小站