free命令使用(内存计算)

最近在看服务器性能的参数,free命令总是用得很晕。

之所以晕,是因为不同版本的free打印的数据项目不一样,数据也不一样。

之前看了v3.2.8的,查查资料,弄明白了。后来看v3.3.10,又不一样了,这次就专门整理记录下。

 

一、先熟悉下free 的命令参数  

free --help

出来结果:

free: invalid option -- '-'
usage: free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V]
-b,-k,-m,-g show output in bytes, KB, MB, or GB       
-h human readable output (automatic unit scaling)
-l show detailed low and high memory statistics
-o use old format (no -/+buffers/cache line)
-t display total for RAM + swap
-s update every [delay] seconds
-c update [count] times
-a show available memory if exported by kernel (>80 characters per line)
-V display version information and exit

1)-b,-k,-m,-g show output in bytes, KB, MB, or GB

按照bytes, KB, MB, or GB作为单位来输出,

例如:

free -m
             total       used       free     shared    buffers     cached
Mem:         16080      15858        222          1        322      13278
-/+ buffers/cache:       2258      13822
Swap:         8191        381       7810
free -g
             total       used       free     shared    buffers     cached
Mem:            15         15          0          0          0         12
-/+ buffers/cache:          2         13
Swap:            7          0          7

2)-h human readable output (automatic unit scaling)

人性化输出,例如:

free -h
             total       used       free     shared    buffers     cached
Mem:           15G        15G       228M       1.9M       322M        12G
-/+ buffers/cache:       2.2G        13G
Swap:         8.0G       381M       7.6G

3)-l show detailed low and high memory statistics

不知道啥意思..

4) use old format (no -/+buffers/cache line)

不显示-/+buffers/cache 这一行。v3.3.10没有这个参数选项。

5)-t display total for RAM + swap

显示内存+交换空间的总内存,t是total的意思吧。例:

free -ht
             total       used       free     shared    buffers     cached
Mem:           15G        15G       225M       1.9M       322M        12G
-/+ buffers/cache:       2.2G        13G
Swap:         8.0G       381M       7.6G
Total:         23G        15G       7.8G

感觉也没多大意义

6)-s update every [delay] seconds

不断输出,指定间隔秒数。不过这里不一定是整数,0.5也可以! 

比如 free -h -s 10 ,就是10秒输出一次。

7)-c update [count] times

不断输出,指定输出次数。

比如  free -h -c 10,就是输出10次。

但是在版本 v3.2.8,就是输出一次!需要配合 -s 食用。

在版本 v3.3.10,不加-s,就默认1秒输出一次。其他版本怎么样,不清楚。

比如free -h -s 2 -c 10,每隔2秒输出一回,输出10次。

8)-a show available memory if exported by kernel (>80 characters per line)

不知道啥意思..,不过

在版本3.3.10,有一个参数是

-w, --wide          wide output。

就是把buffers 和cache 分开显示,因为在3.3.10中,默认打印的是(buffers + cache)的

9)-V display version information and exit

 查看版本号。

 

二、数据查看

举例:

v3.2.8

free -h
             total       used       free     shared    buffers     cached
Mem:           15G        15G       263M       1.9M       322M        12G
-/+ buffers/cache:       2.2G        13G
Swap:         8.0G       381M       7.6G
v3.3.10
 free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        5.9G        626M        1.2G        9.1G        8.0G
Swap:           29G         28M         29G
free -wh
              total        used        free      shared     buffers       cache   available
Mem:            15G        5.9G        610M        1.2G        2.8G        6.3G        8.0G
Swap:           29G         28M         29G

 

1.total:总可用物理内存。一般是总物理内存除去一些预留的和操作系统本身的内存占用,是操作系统可以支配的内存大小。这个在v3.2.8和v3.3.10一样。这个值是/proc/meminfo中MemTotal的值。
2.used:已使用的物理内存。
在v3.2.8,这个值是(total - free)得出来的。可以说是系统已经被系统分配,但是实际并不一定正在被真正的使用,其空间可以被回收再分配的。
在v3.3.10,这个值是(total - free - cache - buffers)得出来的,是真正目前正在被使用的内存。
3.free:系统还未使用的物理内存。这个值是/proc/meminfo中MemFree的值。
4.shared:共享内存的空间。这个值是/proc/meminfo中Shmem的值。
5.buffers:用来给块设备做缓存的大小。这个值是/proc/meminfo中Buffers的值。
6.cached:v3.2.8中的项。这个值是/proc/meminfo中Cached的值。
cache:v3.3.10中的项。这个值是/proc/meminfo中(Cached + Slab)的值。
     在buff/cache是(buffers+cache)的值。free -w可以分开显示。
7.available:v3.3.10中的项。看起来这个值是可以使用的内存,不过(available + used) < total,也就是available < (free + cache + buffers)。
       而在v3.2.8中(free + cache + buffers)是一般认为的可用内存,既然在新版本中有这个available数据,应该是更准确的吧。毕竟并不是所有的未使用的内存就一定是可用的。
       这个值是取的/proc/meminfo中MemAvailable的值,如果meminfo中没有这个值,会依据meminfo中的Active(file),Inactive(file),MemFree,SReclaimable等值计算一个。

-/+ buffers/cache
v3.2.8有这一行,v3.3.10 没有。
其中,used 这一项是(used - buffers - cached)的值,即(total - free - buffers - cached)的值,是真正在使用的内存的值。
free 这一项是(free + buffers + cached)的值,是真正未使用的内存的值。
个人觉得有 -/+ buffers/cache,这一栏看的挺习惯。。不过新版本v3.3.10的used更明确。相信有不少人和我一样,刚看到v3.2.8里面的used占了这么多内存的时候,有点摸不着头脑。

总结一下:
(1) 使用 free v3.2.8,看内存占用,两个办法:
1.看 -/+ buffers/cache 这一行。used 是已使用的内存;free 是未使用的内存。
2.看 Mem 这一行。(used - buffers - cached) 是已使用的内存;(free + buffers + cached) 是未使用的内存。
(2) 使用 free v3.3.10,看内存占用:
看 Mem 这一行。used 是已使用的内存;(free + buff/cache),即(total - used)是未使用的内存;available 是剩余可以使用的内存。未使用的内存不代表都可用,所以 available <(total - used).



2019-10-29 18:32:53






posted @ 2019-10-29 18:21  _zxq  阅读(1891)  评论(0编辑  收藏  举报