Shell常用命令之free

Posted 天行健君子自强不息

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell常用命令之free相关的知识,希望对你有一定的参考价值。

前言

free查看当前系统的内存及交换分区使用情况。(写这篇文档是因为一次面试中,面试官问道buff cache你了解吗? 两个月不碰系统突然有些懵。。。你了解什么叫buff/cache吗?)

 

语法格式

free [options]

 

选项

-b:以Byte为单位显示内存使用情况
-k:以KB为单位显示内存使用情况
-m:以MB为单位显示内存使用情况
-g:以GB为单位显示内存使用情况
-h:以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:
    B = bytes
    K = kilos
    M = megas
    G = gigas
    T = teras

-o:不显示缓冲区调节列
-s<间隔秒数>:持续观察内存使用状况
-t:显示内存总和列
-V:显示版本信息

 

实例

查看当前系统内存使用状况

sh-4.2# free -m
              total        used        free      shared  buff/cache   available
Mem:          32105        8401       21728           9        1975       23296
Swap:         65535           0       65535

# Mem(第二行):物理内存描述信息
# Swap(第三行):交换内存描述信息
# total(第二列):系统总的可用物理内存大小
# used(第三列):已被使用的物理内存大小
# free(第四列):还有多少物理内存可用
# shared(第五列):多个进程共享的内存总额;如oracle的共享内存
# buff/cache(第六列):这里是两个内容的描述;buff表示I/O缓存、cache表示高速缓存。
# available(第七列):还可以被应用程序使用的物理内存大小

 

PS:free 与 available 的区别

  • free 是真正尚未被使用的物理内存数量。
  • available是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)

 

Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。这就是稍后要说明的 buffer 和 cache。

 

PS:buffer和cache

  • buff(Buffer Cache)是一种I/O缓存,用于内存和硬盘的缓冲,是io设备的读写缓冲区。根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
  • cache(Page Cache)是一种高速缓存,用于CPU和内存之间的缓冲 ,是文件系统的cache。把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。

 

动态查看内存使用情况

sh-4.2# free -m -s 1
              total        used        free      shared  buff/cache   available
Mem:          32105        8402       21726           9        1975       23294
Swap:         65535           0       65535

              total        used        free      shared  buff/cache   available
Mem:          32105        8402       21726           9        1975       23294
Swap:         65535           0       65535

              total        used        free      shared  buff/cache   available
Mem:          32105        8402       21726           9        1975       23294
Swap:         65535           0       65535

              total        used        free      shared  buff/cache   available
Mem:          32105        8402       21726           9        1975       23294
Swap:         65535           0       65535

              total        used        free      shared  buff/cache   available
Mem:          32105        8402       21726           9        1975       23294
Swap:         65535           0       65535

              total        used        free      shared  buff/cache   available
Mem:          32105        8402       21726           9        1975       23294
Swap:         65535           0       65535

              total        used        free      shared  buff/cache   available
Mem:          32105        8402       21726           9        1975       23294
Swap:         65535           0       65535

# 每隔1S就会动态查看/proc/meminfo里面的内容

 

释放内存

echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

# 1表示清除page cache数据
# 2表示清除slab分配器中的对象(包括目录项缓存和inode缓存)
# 3表示清除pagecache和slab分配器中的缓存对象
# /proc/sys/vm/drop_caches的默认值是0.
# 清除数据以前记得sync,先同步缓存中的数据至硬盘,以免数据丢失。

 

参考文档

https://www.cnblogs.com/M18-BlankBox/p/5326484.html

https://www.jianshu.com/p/2ffeb3a3aa90

https://focusss.github.io/2019/02/10/Linux%E4%B8%ADbuff-cache%E5%8D%A0%E7%94%A8%E8%BF%87%E9%AB%98%E8%A7%A3%E5%86%B3%E6%89%8B%E6%AE%B5/

以上是关于Shell常用命令之free的主要内容,如果未能解决你的问题,请参考以下文章

linux系列之常用运维命令整理笔录

shell常用命令

linux系列之常用运维命令

linux系列之常用运维命令整理笔录

常用的shell命令汇总,夯实Linux基础

N天学习一个Linux命令之free