• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

RHEL centos 5 6 7 查看内存命令 free 各字段的解释

1. free 命令

常用的查看内存工具有:top,ps,free,/proc/meminfo,/proc/$PID/status等,一般都指定了虚拟内存占用情况,但ps或/proc/$PID/status中RSS或RSZ指定的是实际内存大小。

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。free 的统计信息都是来自 /proc/meminfo 文件。

如:centos7 中 free 每 2s 统计一次

[root@tmp opt]# free -m -s 2
              total        used        free      shared  buff/cache   available
Mem:            487          63         121           4         302         385
Swap:          2047           0        2047

              total        used        free      shared  buff/cache   available
Mem:            487          63         121           4         302         385
Swap:          2047           0        2047

              total        used        free      shared  buff/cache   available
Mem:            487          63         121           4         302         385
Swap:          2047           0        2047

字段解释(来自man free 翻译)

free 统计系统中空闲free已使用used的物理内存和swap交换内存的总量,以及内核使用的缓冲区buffers缓存caches。这些值是通过分析/proc/meminfo来收集的。

  • total: 总的可用内存 (分为 memswap)

  • used: 已使用的内存 total - free - buffers - cache

  • free: 未使用的内存 (MemFree and SwapFree in /proc/meminfo)

  • shared: 主要由tmpfs使用的共享内存 (Shmem in /proc/meminfo,kernels 2.6.32以上可用,不可用显示 0)

  • buffers: 内核buffers使用的内存(Buffers in /proc/meminfo)

  • cache:  被page cacheslabs使用的内存 (Cached and Slab in /proc/meminfo)

  • buff/cachebuffers + cache

  • available: 不考虑swap的情况下,可以被应用程序使用的物理内存大小。与cache或free字段提供的数据不同,available 考虑了页面缓存,但也不是全部

buffers/cached/slab

Buffers是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单词大的写等等

Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。

Slab 包括两部分

  • SReclaimable: 其中记录的是可回收部分

  • SUnreclaim: 其中记录的是不可回收部分 

单来说,Buffer 是对磁盘数据的缓存,而 Cache文件数据的缓存,它们既会用在读请求中,也会用在写请求中。

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

2. 输出样式

RHEL 5 和 RHEL 6

             total       used       free     shared    buffers     cached
Mem:       7778104    2971960    4806144          0     211756    1071092
-/+ buffers/cache:    1689112    6088992
Swap:      4194296          0    4194296

RHEL 7

              total        used        free      shared  buff/cache   available
Mem:        1012952      252740      158732       11108      601480      543584
Swap:       1048572        5380     1043192

对于RHEL 7,增加了 available 字段,用于代替  -/+ buffers/cache  行

3. free 输出 对应 meminfo 的字段

下表显示了 Red Hat Enterprise Linux 56 7.0 中的 free 输出与 /proc/meminfo 的字段匹配情况

image.png

下表显示了 Red Hat Enterprise Linux 7.1+ (procps-ng 3.3.10) 中的 free 输出与 /proc/meminfo 的字段匹配情况

image.png


参考:https://access.redhat.com/solutions/406773


0
0
下一篇:linux 系统 内存中的 Buffer 和 Cache 解释

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。