Linux free 命令

在Linux/Unix 系统上,free是一个很受系统管理员欢迎的命令,它是一个功能强大的工具,他能以一种易读的方式把内存使用情况展示出来

free 展示了系统中空闲和已经使用了的物理内存、交换内存以及内核的缓冲区和页面缓存,所有展示的信息都是从 /proc/meminfo 文件解析出来的

语法
free命令的语法如下

free [options]

输出列说明
当只输入free 命令不带任何选项时,输出的内存和交换内存大小是以 KB(kbytes)为单位的,具体的输出如下所示(在旧版的Linux系统中,显示可能略有不同):

[root@ecs-centos-7 ~]# free
             total        used        free      shared  buff/cache   available
Mem:        1881544      325980     1307868        8712      247696     1406892
Swap:             0           0           0
total

总内存的大小,可以用于应用程序的内存

used

已经使用内存,计算方式是:used = total - free - buff/cache

free

还没有使用的内存

shared

进程之间的共享内存

buff/cache

内核缓冲区和页面缓存,如果应用程序需要的话,可以随时回收这部分缓存,通过 free -w 命令可以分别显示 buff 和 cache 占用的内存

available

可用内存的预估大小,可以用于启动新的应用程序,实际应用中,可以把 free 和 buff/cache 加起来看做 available 的近似值,即 free + buff/cache ≈ available

常用的选项
以下是一些常用的选项

以易读的方式显示

[root@ecs-centos-7 ~]# free -h
             total        used        free      shared     buffers       cache   available
Mem:        1881544      353752      881684        8712      147960      498148     1370492
Swap:             0           0           0
显示物理内存和交换内存的总和

[root@ecs-centos-7 ~]# free -t
             total        used        free      shared  buff/cache   available
Mem:        1881544      354108      881328        8712      646108     1370136
Swap:             0           0           0
Total:      1881544      354108      881328
每隔N秒输出一次

[root@ecs-centos-7 ~]# free -s 2
             total        used        free      shared  buff/cache   available
Mem:        1881544      353960      881476        8712      646108     1370284
Swap:             0           0           0

             total        used        free      shared  buff/cache   available
Mem:        1881544      353984      881452        8712      646108     1370260
Swap:             0           0           0

             total        used        free      shared  buff/cache   available
Mem:        1881544      353984      881452        8712      646108     1370260
Swap:             0           0           0
例子中的命令是每隔2秒输出一次内存信息,直到按 Ctrl + Z 停止

重复输出N次

[root@ecs-centos-7 ~]# free -c 3
             total        used        free      shared  buff/cache   available
Mem:        1881544      353960      881476        8712      646108     1370284
Swap:             0           0           0

             total        used        free      shared  buff/cache   available
Mem:        1881544      353984      881452        8712      646108     1370260
Swap:             0           0           0

             total        used        free      shared  buff/cache   available
Mem:        1881544      353984      881452        8712      646108     1370260
Swap:             0           0           0
上面的例子是重复输出内存信息3次,每次间隔默认是1秒,如果要修改默认输出间隔可以加上 -s 秒数,下面的命令是:重复输出3次,每次输出间隔2秒

free -c 3 -s 2
buff 和 cache 分开显示

[root@ecs-centos-7 ~]# free -w
             total        used        free      shared     buffers       cache   available
Mem:        1881544      354100      881328        8712      147968      498148     1370144
Swap:             0           0           0
以 Bytes、KB、MB、GB 为单位输出

[root@ecs-centos-7 ~]# free -b
             total        used        free      shared  buff/cache   available
Mem:     1926701056   362446848   902631424     8921088   661622784  1403179008
Swap:             0           0           0
[root@ecs-centos-7 ~]# free -k
             total        used        free      shared  buff/cache   available
Mem:        1881544      354100      881328        8712      646116     1370144
Swap:             0           0           0
[root@ecs-centos-7 ~]# free -m
             total        used        free      shared  buff/cache   available
Mem:           1837         345         860           8         630        1338
Swap:             0           0           0
[root@ecs-centos-7 ~]# free -g
             total        used        free      shared  buff/cache   available
Mem:              1           0           0           0           0           1
Swap:             0           0           0
上面的例子中,分别以 Bytes、KB、MB、GB 为单位输出内存信息,会自动忽略小于对应单位的数值,比如 free -g命令,只有 total 和 available 列的值大于 1GB ( 1024 1024 1024 Bytes ), 其他列的值都是小于 1GB,所以 total 和 available 列显示 1,其他列都显示 0

实际还有多少可用内存
[root@ecs-centos-7 ~]# free -h
             total        used        free      shared  buff/cache   available
Mem:           1.8G        534M        100M        8.5M        1.3G        1.5G
Swap:            0B          0B          0B
在上面的示例中,如果只是看 used 以及 free 的话,会以为系统可用内存已经不足100M,也即可使用内存不足 1%了

实际上,已经被应用程序使用的只有 27%左右(534M / 1.8G), 应用程序可用内存是 availabe 或者 free + buff/cache ,也就是说例子中实际可用于应用程序的内存有 1.5G 之多

内存什么时候告急
在平常的服务器监控内存的过程中,有以下几个信号是需要引起注意的

availabe 或者 free + buff/cache 接近于0了

availabe 或者 free + buff/cache 表示实际应用程序的可用内存,如果它接近于0的话,表示应用程序可用内存不足,需要尽快处理

已使用交换内存一直在增长

已使用交换内存一直增长的话,有可能是物理内存不足的先兆,当物理内存长时间不足的时候,才会频繁的使用交换内存,导致已使用交换内存一直增长

出现 Out of memory

为了防止系统物理内存不够用的时候系统崩溃,当检测到内存不足时,系统会 kill 掉最占用内存的进程,/var/log/message 中会记录 Out of memory的日志
参考链接:
3 useful commands to check memory size in Linux

你可能感兴趣的