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