Shell常用命令之free

摘要:
#可用(第七列):应用程序也可以使用的物理内存的大小PS:可用和可用的区别是尚未使用的物理存储器的数量。可用是应用程序认为可用的内存量。可用=空闲+缓冲区+缓存Linux将消耗一些内存资源来缓存磁盘数据,以提高读写性能。对于内核,缓冲区和缓存实际上是使用的内存。这是稍后将解释的缓冲区和缓存。

前言

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内核内存分配(三、虚拟内存管理)JavaScript 面向对象TAB栏切换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Nginx大并发优化实战

    文章知识点:   [ ] 调优的必要性   [ ] 调优的维度和见解分歧   [ ] Nginx调优项   一、调优的必要性   ​ 一直不愿意写优化的内容出来分享,实在是不知道该如何取写。因为,写不好就会被各种慰问,今天终于还是写了,因为有太多人私信或在群里问我或者让给分享经验,我还是从了。   ​ 在聊调优之前,我们先要知道为何调优,业务运行和...

shell中$*,$@,$# 的区别

$@ 和  $* 只在被双引号包起来的时候才会有差异 双引号括起来的情况: $*将所有的参数认为是一个字段 $@以 默认为空格 来划分字段,如果空格在“”里面,不划分。没有括起来的情况是$@和$*一样的,见到 空格 就划分字段。 $#是 程序的 参数个数(不包括$0) $? 获取上一次命令执行的返回值,一般 执行 成功 返回0。 $0 $1 $2 以此...

Shell 判断

1  shell 的$! ,$?, $$,$@ $n        $1 the first parameter,$2 the second... $#        The number of command-line parameters. $0        The name of current program. $?        Last co...

Linux下使用popen()执行shell命令【转】

本文转载自:https://my.oschina.net/u/727148/blog/262987 函数原型:   #include “stdio.h”   FILE popen( const char command, const char* mode )   参数说明:   command: 是一个指向以 NULL 结束的 shell 命令字符串的指针...

shell替换jar包中配置文件脚本

脚本运行平台:centos7.3 1、编写脚本 vi /tmp/change.sh #!/bin/bash#需要替换的包名称bmc=$1#需要替换的文件名称hhwjmc=$2#找到替换文件路径thwjlj=`jar -tvf \$bmc|grep \$hhwjmc|awk '{print \$NF}'` echo $bmcecho $hhwjmcecho...

adb 环境配置 常用命令 [MD]

markdown 格式 博文地址 我的GitHub 我的博客 我的微信 我的邮箱 baiqiantao baiqiantao bqt20094 baiqiantao@sina.com adb简介 ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。...