每次使用free时都比较迷惑,对于上面的内容一直都不是很清楚,今天仔细查了以下,和大家一起分享以下:

先看一下free的运行结果:

free打印出的内存信息主要分为两种,一种是安装的内存,一种是用磁盘虚拟的内存,就是这里的Swap,相信装过Linux系统的同学肯定不陌生交换分区,这里Swap大小就是我们分区的时候分配的大小。 
下面来分别解释以下每个列的意思:

  1. total:去掉为硬件和操作系统保留的内存后剩余的内存总量。许多人奇怪自己的电脑安装了一共8G的内存,但是显示总共只有七点几G的,现在应该没什么疑惑了把,不管Linux还是Windows都会有部分内存是保留给硬件和操作系统的!
  2. userd:当前已使用的内存总量。
  3. free:空闲的或可以使用的内存总量
  4. shared:共享内存大小,主要用于进程间通信
  5. buff(buffers):主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。
  6. cache:主要用于文件内容缓冲
  7. available:可以使用的内存总量

buffers与cached的区别:

  1. 对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
  2. 所以从应用程序的角度来说 可用内存=系统free memory+buffers+cached.
  3. buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages,cached是用来给文件做缓冲。
  4. 那就是说:buffers是用来存储,目录里面有什么内容,权限等等,而cached直接用来记忆我们打开的文件的。
  5. 关于为什么需要缓冲,这里简单解释以下:我们知道,在CPU,内存,外存的运行速度之间,存在这样的关系:
  6. CPU比内存快100倍,内存比磁盘快十万倍,且他们之间的差距还在增大!
  7. 因此为了协调他们速度之间的不匹配,缓存就由此而生,在CPU内部的缓存,为了协调CPU和内存之间速度的不匹配,而内存的产生也是为了协调磁盘和CPU速度的不匹配。有个这样的一个形象的描述:把CPU的一个时钟周期看作一秒。那么,从L1 cache(CPU的一级缓存)读取信息就好像是拿起桌上的一张草稿纸(3秒);从L2 cache(CPU的二级缓存)读取信息则是从身边的书架上取出一本书(14秒);而从主存中读取信息则相当于走到办公楼下去买个零食(4分钟),而等待硬盘寻道的时间相当于离开办公大楼并开始长达一年零三个月的环球旅行,而这仅仅是寻道时间!

free的详细使用方法

  1. 语  法: free [-hbkmotV][-s <间隔秒数>]
  2. 补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
  3. 参  数:
  4. -b  Byte为单位显示内存使用情况。
  5. -k  KB为单位显示内存使用情况。
  6. -m  MB为单位显示内存使用情况。
  7. -h 以比较人性化的方式显示内存使用情况。
  8. -o  不显示缓冲区调节列。
  9. -s <间隔秒数>  持续观察内存使用状况。
  10. -t  显示内存总和列。
  11. -V  显示版本信息。

free的实现方式

  1. 关于free的实现,其实是调用linux下的/proc/meminfo文件
  2. 可以对比一下:
  3. zhoupan@Lenovo-G485:~$ free
  4. total used free shared buff/cache available
  5. Mem: 3636688 2286620 240768 79560 1109300 1210716
  6. Swap: 1998844 0 1998844
  7. zhoupan@Lenovo-G485:~$ cat /proc/meminfo
  8. MemTotal: 3636688 kB
  9. MemFree: 239996 kB
  10. MemAvailable: 1209972 kB
  11. Buffers: 96424 kB
  12. Cached: 912480 kB
  13. SwapCached: 0 kB
  14. Active: 2535176 kB
  15. Inactive: 646160 kB
  16. Active(anon): 2174012 kB
  17. Inactive(anon): 77972 kB
  18. Active(file): 361164 kB
  19. Inactive(file): 568188 kB
  20. Unevictable: 448 kB
  21. Mlocked: 448 kB
  22. SwapTotal: 1998844 kB
  23. SwapFree: 1998844 kB
  24. Dirty: 60 kB
  25. Writeback: 0 kB
  26. AnonPages: 2172872 kB
  27. Mapped: 397968 kB
  28. Shmem: 79560 kB
  29. Slab: 100424 kB
  30. SReclaimable: 68764 kB
  31. SUnreclaim: 31660 kB
  32. KernelStack: 8896 kB
  33. PageTables: 42788 kB
  34. NFS_Unstable: 0 kB
  35. Bounce: 0 kB
  36. WritebackTmp: 0 kB
  37. CommitLimit: 3817188 kB
  38. Committed_AS: 6151536 kB
  39. VmallocTotal: 34359738367 kB
  40. VmallocUsed: 0 kB
  41. VmallocChunk: 0 kB
  42. HardwareCorrupted: 0 kB
  43. AnonHugePages: 1112064 kB
  44. CmaTotal: 0 kB
  45. CmaFree: 0 kB
  46. HugePages_Total: 0
  47. HugePages_Free: 0
  48. HugePages_Rsvd: 0
  49. HugePages_Surp: 0
  50. Hugepagesize: 2048 kB
  51. DirectMap4k: 175872 kB
  52. DirectMap2M: 3602432 kB
  53. DirectMap1G: 0 kB
  54. >>由于系统在高速的运转,可能存在部分数据不相同

 

 
 

Linux上的free命令简介的更多相关文章

  1. Linux上的free命令详解、swap机制

    Linux上的free命令详解   解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...

  2. PHP在linux上执行外部命令

    PHP在linux上执行外部命令 一.PHP中调用外部命令介绍二.关于安全问题三.关于超时问题四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍在PHP中调用外部命令,可以 ...

  3. 在linux上用dd命令实现ghost功能

    ghost和g4l 安装操作系统,速度太慢,整个过程太冗长乏味了. 安装过程中,需要回答若干问题,系统需要安装无数个软件,创建和写入无数的文件.因为涉及到大量的文件定位和读写,速度一定是快不起来的. ...

  4. linux中的strings命令简介2

    摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 之前我们聊过linux strings的用法和用 ...

  5. linux中的strings命令简介

    摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 在linux下搞软件开发的朋友, 几乎没有不知道 ...

  6. Apache RocketMQ在linux上的常用命令

    Apache RocketMQ在linux上的常用命令 进入maven安装后的rocketmq的bin目录  1.启动Name Server  2.启动Broker 3.关闭Name Server 4 ...

  7. Linux上通过MySQL命令访问MySQL数据库时常见问题汇总

    Linux上通过mysql命令访问MySQL数据库时常见问题汇总 1)创建登录账号 #创建用户并授权 #允许本地访问 create user 'test'@'localhost' identified ...

  8. linux上的常见命令掌握

    http://coolshell.cn/articles/8883.html 这篇文章来源于Quroa的一个问答<What are some time-saving tips that ever ...

  9. Linux上的free命令详解

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

随机推荐

  1. (剑指Offer)面试题41:和为s的两个数字

    题目: 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s,如果有多对数字的和等于s,输出任意一对即可. 思路: 1.枚举 固定一个数字,然后依次判断数组中该数字后面的数字与 ...

  2. C#基础视频教程1 背景知识和安装配置

    安装过程比较简单,用虚拟光驱工具加载ISO文件,然后打开EXE安装即可,主要使用VS2013(VS2015也出来了,但是用的还不算多)     建议设置为深色(比较容易看清)   建议显示行号,不要自 ...

  3. Ubuntu下压缩包内文件解压后乱码问题的解决

    用到的工具是The Unarchiver项目提供的lsar/unar工具. The Unarchiver项目主页:http://code.google.com/p/theunarchiver/ 安装( ...

  4. <c:redirect>标签的使用

    <c:redirect>标签的使用代码例子 redirect.jsp <%@ page contentType="text/html" pageEncoding= ...

  5. 算法笔记_030:回文判断(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 给定一个字符串,如何判断这个字符串是否是回文串? 所谓回文串,是指正读和反读都一样的字符串,如madam.我爱我等. 2 解决方案 解决上述问题,有 ...

  6. Unity3D入门工具介绍(一)

    1.UnitySetup-4.1.2.exe安装包 2unity.pro.4.1.2.patch-MPT.exeUnity3D破解补丁  关于Unity3d 可以看下这个 http://book.2c ...

  7. windows配置meld

    meld                   官网:http://meldmerge.org/ git配置: git bash: git config --global merge.tool meld ...

  8. TypeScript 面向对象基础知识

    孙广东  2016.4.5 JavaScript如今到处都是.web.server(通过NodeJS).移动应用(通过各种框架).全部这些,TypeScript都能够使用,而且能够为JavaScrip ...

  9. Linux系统中的信号量(semphore)与互斥体(mutex)

    http://www.embexperts.com/viewthread.php?tid=31 两者最大区别:信号量可以允许多个线程进入临界区,而互斥体只允许一个线程进入临界区.本贴将描述信号量与互斥 ...

  10. Hadoop集群+Spark集群搭建(一篇文章就够了)

    本文档环境基于ubuntu16.04版本,(转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢) 一.准备 1.1 软件版本 Ub ...