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: 总的可用内存 (分为 mem 和 swap)
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 cache和slabs使用的内存 (Cached and Slab in /proc/meminfo)
buff/cache: buffers + 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 5、6 和 7.0 中的 free 输出与 /proc/meminfo 的字段匹配情况
下表显示了 Red Hat Enterprise Linux 7.1+ (procps-ng 3.3.10) 中的 free 输出与 /proc/meminfo 的字段匹配情况
参考:https://access.redhat.com/solutions/406773
共 0 条评论