本篇转自:http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html  

解释一下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]比较小的原因。我们可以做一个简单的测试:

  1. 释放掉被系统cache占用的数据;

    echo 3>/proc/sys/vm/drop_caches
  2. 读一个大文件,并记录时间;
  3. 关闭该文件;
  4. 重读这个大文件,并记录时间;

第二次读应该比第一次快很多。原来我做过一个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。

free查看可用缓存相关推荐

  1. Windows 计算机上查看 DNS 缓存的方法

    您想了解如何在 Windows 10 中查看 DNS 缓存吗?如果是这样,本教程适合您.在 Windows 10 PC 上,您可以使用多种方法来显示 DNS 内容.首先,这里总结一下 DNS 缓存的含 ...

  2. linux 查看ip_如何在 Linux 中查看可用的网络接口 | Linux 中国

    对于某些人来说,他们更偏爱在安装完系统后再进行网络的配置或者更改现存的设置.众所周知,为了在命令行中进行网络设定的配置,我们首先必须知道系统中有多少个可用的网络接口.-- Sk 在我们安装完一个 Li ...

  3. 最新亿级流量电商详情页系统的大型高并发与高可用缓存架构实战第一版附全套资料

    课程介绍(非升级版) 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握red ...

  4. 亿级流量电商详情页系统的大型高并发与高可用缓存架构实战

    2019独角兽企业重金招聘Python工程师标准>>> 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里 ...

  5. 亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 目录

    对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memcache ...

  6. 亿级流量电商详情页系统的大型高并发与高可用缓存架构

    1.亿级流量电商网站的商品详情页系统架构 面临难题:对于每天上亿流量,拥有上亿页面的大型电商网站来说,能够支撑高并发访问,同时能够秒级让最新模板生效的商品详情页系统的架构是如何设计的? 解决方案:异步 ...

  7. 在哪里能看到计算机缓存大小,如何查看硬盘缓存信息?如何查看计算机硬盘缓存大小的插图...

    最近,一位网友"飞飞"问小编一个与计算机硬盘有关的问题:您如何看待硬盘缓存?硬盘缓存容量越大越好吗?由于通常在Windows系统的铭牌和硬盘表面上直接看不到硬盘缓存的大小,因此如何 ...

  8. dubbo 01.第一套:高并发大型电商详情页系统的大型高性能与高可用缓存架构实战视频教程...

    传送门: 01.第一套:高并发大型电商详情页系统的大型高性能与高可用缓存架构实战视频教程 链接:https://pan.baidu.com/s/1mjUEaAO 密码:qvx5 08.第八套:基于Du ...

  9. 提权,远控生成器,查看浏览器缓存,xp密码破解

    windows:普通user-> Administrator -> system(系统内核) system不包含user权限,Administrator包含user权限  Linux: u ...

最新文章

  1. python 画图 内存-用python 10min手写一个简易的实时内存监控系统
  2. Spring AOP切点表达式详解
  3. Spring:设置日志依赖项
  4. java编写一个邮件程序显示收件箱中所有的邮件列表_如何使用JavaMail获取邮件帐户中的可用文件夹列表...
  5. 线程的故事:3 位“母亲”成就了优秀的我!
  6. 常见单片机芯片分析简介
  7. php 微商城 开源,RF 微商城一款免费开源的基础销售功能的微商城正式发布
  8. 没有密码怎么解除PDF加密
  9. 【Python】利用tkinter开发AI对战井字棋游戏
  10. android屏幕操作提示音,快捷指令库提示音
  11. 月销13485台的理想ONE,到底做对了哪些事儿?
  12. python语言list语句_Python No.13 之练习(购物车)语句while、for、list等
  13. LL(1)文法的判断
  14. TOMCAT HTPPS
  15. QA:笔记本如何选?
  16. Apache Drill详解
  17. 12对胸椎对应体表标志_腰椎的体表标志_第一至第五腰椎怎么定位相应体表标志怎么对应_中国武警总医院...
  18. swift uikit
  19. android蓝牙查看电池容量_Android获取电池电量和电池容量
  20. tring_vector容器test

热门文章

  1. 10进制转16进制,16进制转10进制,随机出一个6位十六进制颜色值
  2. ajaxfileupload 跨域 (二级域名) 可行办法
  3. django开发Blog(1)
  4. 使用ASP.NET Atlas开发随输入内容自动调整行数的textarea(转)
  5. 图像拼接和图像融合技术
  6. 49 款人脸检测/识别的API、库和软件
  7. 图像滤镜艺术---PS图层混合模式之明度模式
  8. GPUImage简单说明
  9. SpringMVC源码之参数解析绑定原理
  10. intelliJ idea如何安装、配置