`

Linux上的free命令详解

 
阅读更多
解释一下Linux上free命令的输出。

  下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:

    FO[2][1] = 24677460
    FO[3][2] = 10321516 

                   1          2          3          4          5          6
1              total       used       free     shared    buffers     cached
2 Mem:      24677460   23276064    1401396          0     870540   12084008
3 -/+ buffers/cache:   10321516   14355944
4 Swap:     25151484     224188   24927296

  free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。

  free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。

  第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:

    24677460KB(缺省时free的单位为KB)物理内存,即FO[2][1];
    在这些物理内存中有23276064KB(即FO[2][2])被使用了;
    还用1401396KB(即FO[2][3])是可用的;

这里得到第一个等式:

    FO[2][1] = FO[2][2] + FO[2][3]

FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。

FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:

    A buffer is something that has yet to be "written" to disk.
    A cache is something that has been "read" from the disk and stored for later use.

也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么FO[2][6](cached memory)比较大,而FO[2][3]比较小的原因。我们可以做一个简单的测试:

    释放掉被系统cache占用的数据;
    echo 3>/proc/sys/vm/drop_caches

    
    读一个大文件,并记录时间;
    关闭该文件;
    重读这个大文件,并记录时间;

第二次读应该比第一次快很多。原来我做过一个BerkeleyDB的读操作,大概要读5G的文件,几千万条记录。在我的环境上,第二次读比第一次大概可以快9倍左右。

  free输出的第二行是从一个应用程序的角度看系统内存的使用情况。

    对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
    对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;

因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。

这里还用两个等式:

    FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
    FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

这二者都不难理解。

  free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的所有输出值都是从/proc/meminfo中读出的。

在系统上可能有meminfo(2)这个函数,它就是为了解析/proc/meminfo的。procps这个包自己实现了meminfo()这个函数。可以下载一个procps的tar包看看具体实现,现在最新版式3.2.8。
分享到:
评论

相关推荐

    linux free命令详解

    本篇文章主要介绍了linux free命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Linux free命令用法详解

    Linux free命令 Linux free命令用于显示内存状态。 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 语法free [-bkmotV][-s ] 参数说明: -b 以Byte...

    Linux的free命令详解-内存是拿来用的

    绍linux的free命令。

    free 详解 查看内存情况

    linux操作系统 free命令 详解 查看监控内存情况详解;

    Linux常用命令大全.zip

    内含Linux常用必会60+个命令实例以及详解。 Linux提供了大量的命令,利用它可以有效地完成大量的工作, 如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。 所以,在Linux系统上工作离不开使用系统提供的...

    Linux 内存释放命令详解

    以上内容比较简单,成功的给大家介绍了Linux 内存释放命令的知识,希望能够帮助到大家! 您可能感兴趣的文章:php查找指定目录下指定大小文件的方法linux下查看内存条数及每根内存大小的实现方法(推荐)linux查看文件...

    入门学习Linux常用必会60个命令实例详解doc/txt

    入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不...

    大数据基础-Linux基础详解课程31.基本命令-磁盘操作命令(df,du.free).mp4

    大数据基础-Linux基础详解课程

    linux设备驱动程序第三版

    1. Linux 设备驱动第三版 .................................................................................................................... 5 2. 第 1 章 设备驱动简介 ....................................

    Linux系统命令及其使用详解(完美版)

    运维工程师必会的109个Linux命令,分为 [1].文件管理 cat cd chmod.. [2].磁盘管理 dd df du.. [3].压缩管理bzip2 cpio split.. [4].进程管理 crontab kill ps nohup.. [5].网络管理 finger ftp netstat.. [6].系统...

    Linux命令搜索工具linux-command.zip

    Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。   Linux命令分类 这里存放Linux 命令大全并不全,你可以通过linux-command来搜索,它是把 command 目录里面搜集的...

    实例详解Linxu中df命令

    df 即“可用磁盘”disk free,用于显示文件系统的磁盘使用情况,本文通过一些例子给大家讲解linux df命令,感兴趣的朋友一起学习吧

    arm和linux相关.zip

    怎样读Linux内核源代码 嵌入式系统的构建 让你的软件飞起来(简单程序开罗思维) Uboot启动过程详解 ...Linux系统命令及其使用详解 Linux内核配置编译分析实验 C语言嵌入式系统编程修炼。。。。。。。。

    Linux之分配 swap 分区详解

    1. free 命令 free 查看内存与 swap 分区使用状况 cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程 buffer(缓冲):是指在写入数据时...

    详解Linux手动释放缓存的方法

    Linux释放内存的命令: sync echo 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 3:释放所有缓存 释放...

    Linux DeviceDrivers 3rd Edition

    get_free_page和相关函数 221 vmalloc及其辅助函数 225 per-CPU变量 228 获取大的缓冲区 230 快速参考 231 第九章 与硬件通信 235 I/O端口和I/O内存 235 使用I/O端口 239 I/O端口示例 245 使用I/O内存 248 ...

    Linux 下redis5.0.0安装教程详解

    Linux redis5.0.0安装,教程如下所示: 1.从官网下载,然后传到服务器,tar -zxvf解压   2.进入redis [root@localhost software]# cd redis-5.0.0/ ...原因是jemalloc重载了Linux下的ANSI C的malloc和free函

    [14本经典Android开发教程]-8-Linux内核阅读心得体会

    读核感悟 内存管理 free命令详解 58 读核感悟 文件读写 2 6 9内核中的AIO 59 1 AIO概述 59 2 内核态AIO的使用 61 读核感悟 文件读写 内核态AIO相关结构体 61 1 内核态AIO操作相关信息 61 2 AIO上下文: 63 3 AIO ...

Global site tag (gtag.js) - Google Analytics