Linux命令之free
一、介绍
free命令用于查看当前系统中内存使用量信息。free显示系统中已用和未用的物理内存和交换内存, 共享内存和内核使用的缓冲区的总和.
二、命令选项
下表命令选项为 free 新版本的命令选项,旧版本无 --tera/–peta/–si/-h/-w 这些选项,新版本也无 -o(不显示-/+buffers/cache行)选项
Options | Details |
---|---|
-b, --bytes | 以字节为单位显示内存总和 |
-k, --kilo | 以-sKB为单位显示内存总和 |
-m, --mega | 以MB为单位显示内存总和 |
-g, --giga | 以GB为单位显示内存总和 |
–tera | 以TB为单位显示内存总和 |
–peta | 以PB为单位显示内存总和 |
-h | 显示人类可读的输出 |
–si | use powers of 1000 not 1024 |
-l, --lohi | 显示详细的低内存和高内存统计信息 |
-t, --total | 显示一个总计行 |
-s N | 每N秒打印一次 |
-c N | 重复打印N次然后退出 |
-w, --wide | 宽输出 |
–help | 显示帮助 |
-V, --version | 打印输出free的版本信息 |
三、命令详解
1、旧版本
[root@TEST ~]# free
total used free shared buffers cached
Mem: 1907776 1044924 862852 0 66196 600572
-/+ buffers/cache: 378156 1529620
Swap: 2097144 0 2097144
Mem这一行是从Linux内核的角度看物理内存的使用量
- total:计算机的物理内存总量
- used:从Linux内核的角度,已使用的内存=应用程序使用的内存+内核使用的内存(可回收+不可回收)
- free:完全没有使用到的内存
- shared:共享内存
- buffers:内核的buffers cache系统占用
- cached:内核的page cache系统占用。
-/+ buffers/cache这一行是从应用程序的角度看物理内存的使用量
- used:应用程序实际使用的内存。其值为Mem一行中的used - buffers - cached = total - free - buffer - cached。
- free:从应用程序的角度看还可以使用的内存(不是非常准确)。其值为Mem一行中的free + buffers + cached。但是buffers/cached是包含了shared的,shared不能被随时回收。
2、新版本
[root@rac1 ~]# free
total used free shared buff/cache available
Mem: 131499548 13283584 74329456 39499700 43886508 77644500
Swap: 33554424 0 33554424
- total:/proc/meminfo中的MemTotal,表示计算机的内存总量
- used:被占用的内存,不能随时回收,其值为total - free - buff/cache
- free:/proc/meminfo中的Memfree,完全没有被使用到的内存
- shared:/proc/meminfo中的Shmem,共享内存,一般是被tmpfs占用
- buff/cache:/proc/meminfo中的Buffers及Cached,分别为buff+cache,缓冲、缓存区内存数,缓存在应用之中。
- available:/proc/meminfo中的MemAvailable,应用程序真正可用的内存(比较准确的评估值)
四、说明
free 命令输出的数据本质上是由/proc/meminfo下的统计数据。新版的内核优化了/proc/meminfo下的一些统计数据,使得free命令的输出更加准确、清晰。
这里要明确一点,大部分情况下,大部分buffer/cache占用的内存在需要时可以被回收并重新分配。但是要注意下面几点:
- shared 属于 page cache,所以 cache 的统计里包括 shared,但是 shared 不能被内核随时回收。
- buffer 或 cache 对应的统计信息里,还有一部分被内核“真正”占用,这部分也不能被随时回收。
- 大部分内核的 free 命令还是输出旧的格式,此时我们只能根据输出简单估算出 available 的内存大小。
五、buffer/cache内存回收
当系统运行一段时间以后,buffer/cache占用的内存过多,导致free空间内存变少,可用下列命令回收buffer/cache内存。
[root@MESBackup ~]# echo 1 > /proc/sys/vm/drop_caches
[root@MESBackup ~]# echo 2 > /proc/sys/vm/drop_caches
[root@MESBackup ~]# echo 3 > /proc/sys/vm/drop_caches
示例如下:
[root@MESBackup ~]# free
total used free shared buff/cache available
Mem: 15907996 4458368 276936 6462696 11172692 4520532
Swap: 16449528 0 16449528
[root@MESBackup ~]# echo 1 > /proc/sys/vm/drop_caches
[root@MESBackup ~]# echo 2 > /proc/sys/vm/drop_caches
[root@MESBackup ~]# echo 3 > /proc/sys/vm/drop_caches
[root@MESBackup ~]# free
total used free shared buff/cache available
Mem: 15907996 4307776 4845884 6462688 6754336 4771556
Swap: 16449528 0 16449528
编写脚本
[root@MESBackup ~]# vim cleanmem.sh
#!/bin/bash
echo "开始清理缓存"
sync;sync;sync #写入硬盘,防止数据丢失
sleep 10 #延迟10秒
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
echo "清理结束"
[root@MESBackup ~]# chmod 777 cleanmem.sh
为这个脚本赋权后,每次需要清理buffer/cache内存运行脚本即可,可以配置定时任务,定时清理。
更多链接
free命令:https://man.linuxde.net/free