Linux命令之free

Linux命令之free

一、介绍

  free命令用于查看当前系统中内存使用量信息。free显示系统中已用和未用的物理内存和交换内存, 共享内存和内核使用的缓冲区的总和.

二、命令选项

  下表命令选项为 free 新版本的命令选项,旧版本无 --tera/–peta/–si/-h/-w 这些选项,新版本也无 -o(不显示-/+buffers/cache行)选项

OptionsDetails
-b, --bytes以字节为单位显示内存总和
-k, --kilo以-sKB为单位显示内存总和
-m, --mega以MB为单位显示内存总和
-g, --giga以GB为单位显示内存总和
–tera以TB为单位显示内存总和
–peta以PB为单位显示内存总和
-h显示人类可读的输出
–siuse 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值