一、前言
Linux中free命令用于分析和统计内存信息(空闲,已用,交换),也就是显示系统中可用的和已用的物理内存及交换内存的总量,以及内核用到的缓存空间,而这些信息是从 /proc/meminfo
中得到的,不过free命令和top命令有些地方很像。
二、free命令使用
接下来,我们直接通过例子来学习该命令的使用。
1. 默认情况下,直接运行free命令:
[mrzhang@192 ~]$ free
total used free shared buff/cache available
Mem: 3823720 891824 2255436 137028 676460 2527420
Swap: 4063228 0 4063228
[mrzhang@192 ~]$
由于我们以及学习过top命令,对这些内存项应该比较了解了,这里直接复制网上的一段内容,来源 https://linux.cn/article-9232-1.html:
- total - 安装的内存的总量(等同于 /proc/meminfo 中的 MemTotal 和 SwapTotal)
- used - 已使用的内存(计算公式为:used = total - free - buffers - cache)
- free - 未被使用的内存(等同于 /proc/meminfo 中的 MemFree 和 SwapFree)
- shared - 通常是临时文件系统使用的内存(等同于 /proc/meminfo 中的 Shmem;自内核 2.6.32 版本可用,不可用则显示为 0)
- buffers - 内核缓冲区使用的内存(等同于 /proc/meminfo 中的 Buffers)
- cache - 页面缓存和 Slab 分配机制使用的内存(等同于 /proc/meminfo 中的 Cached 和 Slab)
- buff/cache - buffers 与 cache 之和
- available - 在不计算交换空间的情况下,预计可以被新启动的应用程序所使用的内存空间。与 cache 或者 free 部分不同,这一列把页面缓存计算在内,并且不是所有的可回收的 slab 内存都可以真正被回收,因为可能有被占用的部分。(等同于 /proc/meminfo 中的 MemAvailable;自内核 3.14 版本可用,自内核 2.6.27 版本开始模拟;在其他版本上这个值与 free 这一列相同)
2. 更改显示的内存单位
默认情况下,显示的内存的单位是kb单位,如果有需要,我们可以选择更改内存的显示单位:
-b 以字节为单位显示
-k 以KB为单位显示
-m 以MB为单位显示
-g 以GB为单位显示
--tera 以TB为单位显示
[mrzhang@192 ~]$ free -k
total used free shared buff/cache available
Mem: 3823720 872568 2268432 138624 682720 2544528
Swap: 4063228 0 4063228
[mrzhang@192 ~]$ free -b
total used free shared buff/cache available
Mem: 3915489280 896196608 2320519168 141623296 698773504 2603241472
Swap: 4160745472 0 4160745472
[mrzhang@192 ~]$ free -g
total used free shared buff/cache available
Mem: 3 0 2 0 0 2
Swap: 3 0 3
[mrzhang@192 ~]$
并且,我们可以通过-h
来提高格式的可读性:
[mrzhang@192 ~]$ free -gh
total used free shared buff/cache available
Mem: 3.6G 887M 2.1G 135M 666M 2.4G
Swap: 3.9G 0B 3.9G
[mrzhang@192 ~]$
使用该参数,free会自动决定使用什么单位来显示内存的各项数据。
3. free命令持续运行
默认情况下,free命令输出的结果只有一次数据就结束了,如果我们想让内存信息持续展示,可以通过-s
参数设置间隔时间,比如每隔3秒运行一次:
[mrzhang@192 ~]$ free -s 3
total used free shared buff/cache available
Mem: 3823720 928332 2212868 138384 682520 2488980
Swap: 4063228 0 4063228
total used free shared buff/cache available
Mem: 3823720 928400 2212800 138384 682520 2488912
Swap: 4063228 0 4063228
并且如果我们想让free命令只执行固定的次数,那么可以通过-c
参数指定指定的次数:
[mrzhang@192 ~]$ free -s 3 -c 2
total used free shared buff/cache available
Mem: 3823720 938632 2202504 138432 682584 2478616
Swap: 4063228 0 4063228
total used free shared buff/cache available
Mem: 3823720 939192 2202020 138356 682508 2478132
Swap: 4063228 0 4063228
[mrzhang@192 ~]$
free命令会在执行完相应的次数之后自动终止。
4. free内存的计算基于1000,而不是1024
如果我们指定 free 用 MB 来显示内存(用 -m 参数),但又想基于 1000 来计算结果,可以用 --si
这个参数来实现:
[mrzhang@192 ~]$ free -mh
total used free shared buff/cache available
Mem: 3.6G 919M 2.1G 135M 666M 2.4G
Swap: 3.9G 0B 3.9G
[mrzhang@192 ~]$ free -mh --si
total used free shared buff/cache available
Mem: 3.8G 940M 2.2G 139M 684M 2.5G
Swap: 4.1G 0B 4.1G
[mrzhang@192 ~]$
5. 使用free命令显示每一列的总和
我们可以使用 -t
参数来显示每一列的总和:
[mrzhang@192 ~]$ free -t
total used free shared buff/cache available
Mem: 3823720 941916 2198804 138840 683000 2474928
Swap: 4063228 0 4063228
Total: 7886948 941916 6262032
[mrzhang@192 ~]$
另外,free的另一个参数 -l
会显示最低和最高的内存统计,并且默认情况下,缓冲/缓存内存是同时输出的,为了取消缓冲和缓存内存的输出,可以使用-w
命令。
[mrzhang@192 ~]$ free -l
total used free shared buff/cache available
Mem: 3823720 938672 2197000 141020 688048 2475612
Low: 3823720 1626720 2197000
High: 0 0 0
Swap: 4063228 0 4063228
[mrzhang@192 ~]$ free -h
total used free shared buff/cache available
Mem: 3.6G 913M 2.1G 135M 669M 2.4G
Swap: 3.9G 0B 3.9G
[mrzhang@192 ~]$ free -wh
total used free shared buffers cache available
Mem: 3.6G 914M 2.1G 135M 2.1M 667M 2.4G
Swap: 3.9G 0B 3.9G
[mrzhang@192 ~]$
最后,我们大致看下free命令的帮助文档,free --help
:
Usage:
free [options]
Options:
-b, --bytes show output in bytes
-k, --kilo show output in kilobytes
-m, --mega show output in megabytes
-g, --giga show output in gigabytes
--tera show output in terabytes
-h, --human show human-readable output
--si use powers of 1000 not 1024
-l, --lohi show detailed low and high memory statistics
-t, --total show total for RAM + swap
-s N, --seconds N repeat printing every N seconds
-c N, --count N repeat printing N times, then exit
-w, --wide wide output
--help display this help and exit
-V, --version output version information and exit
可以看到,我们上文所说的所有参数,在帮助文档中都有对应的简单释义,如果想了解更多,可以自行 man free
。