Linux新手,今天使用了free命令来查看电脑内存的使用情况。如下:-m表示以M来显示。

1、基本信息介绍

(1)其中纵向信息:

  Mem:表示物理内存大小

  -/+ buffers/cached:表示物理内存的缓存统计

  Swap:表示硬盘上交换分区的使用情况。

(2)横向信息:

  第1行Mem(从系统的角度看内存):
  total    内存总数: 768M
  used     已经使用的内存数: 361M
  free       空闲的内存数: 406M
  shared    共享内存(一般系统不会用到):0
  buffers    缓存内存数: 0
  cached    缓存内存数:307M

  注:关于buffers和cached的区别:buffers是用于存放要输出到disk(块设备)的数据,而cache是存放从disk上读出的数据。为了提高文件读取的性能,当应用程序需要用到内存的时候,buffers/cached会很快地被回收。

  ------------------------------------------------- 

  第2行-/+ buffers/cache(从应用程序角度看内存):

  -buffers/cache 的内存数:54 (等于第1行的 used - buffers - cached)

  +buffers/cache 的内存数: 713 (等于第1行的 free + buffers + cached)

  注:-buffers/cache反映的是被程序实实在在使用的内存,而+buffers/cache反映的是程序认为系统还有多少内存.

  ------------------------------------------------

第3行Swap,内存交换空间。

当物理内存不足时,系统便会使用swap。我们知道CPU所读取的数据都来自于内存,当内存不足时,为了让后续程序能顺利执行,内存中暂不使用的程序与数据就会被挪到swap中。此时内存就会空出来给需要执行的程序加载。

由于swap是由硬盘来暂时放置内存中的信息,一般来说, swap 最好不要被使用,尤其swap 最好不要被使用超过20% 以上, 如果您发现swap 的用量超过20% ,那么,最好还是考虑升内存吧,您的电脑受不起折磨了。

2、拓展学习

  (1)free命令的信息来源于/proc/meminfo文件,可使用命令:#cat /proc/meminfo 进行详细查看。

  (2)没有运行很多程序,为何used感觉特别大,剩下的free那么少?Linux系统为了要加速系统效能,所以会将最常使用到的或者是最近使用到的程序数据缓存(cache)下来,这样未来系统要程序数据时,就直接由cache中搜寻取出,而不需要重新读取硬盘,速度上当然就加快了!因此,used很大是正常的喔!

  (3)手工释放内存缓存:

  Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。所以有必要了解一下如何释放缓存。

  要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存  

  接下来进行具体操作:

  1. 使用sync指令,将所有未写的系统缓冲区同步写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。
  #sync

  2. 将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:
  #echo 3 > /proc/sys/vm/drop_caches

  此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。

  要查询当前缓存释放的参数,可以输入下面的指令:
  #cat /proc/sys/vm/drop_caches

参考资料:

1、《鸟哥的Linux私房菜》

2、茶话汇. 如何在Linux操作系统中手工释放内存缓存?

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. Apache RocketMQ在linux上的常用命令

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

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

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

  6. linux上的常见命令掌握

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

  7. Linux上的free命令详解

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

  8. Linux上的free命令详解-收藏

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

  9. 【转】Linux上的free命令详解

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

随机推荐

  1. qml操作播放器

    现在增加了一个filter属性,所以可以很好和opencv结合.转一篇文章(http://blog.qt.io/blog/2015/03/20/introducing-video-filters-in ...

  2. C#抽象类、抽象方法、抽象属性

    定义 在C#中使用关键字 abstract 来定义抽象类和抽象方法. 不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例."一个包含一个或多个纯虚函数 ...

  3. js事件应用

    ---恢复内容开始--- 一.自定义滚动条 var oDiv=document.getElementById('div1'); var oParent=document.getElementById( ...

  4. js基础之动画(三)

    一.链式运动 首先,要改进运动框架 function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; ...

  5. hdu 4622 Reincarnation

    http://acm.hdu.edu.cn/showproblem.php?pid=4622 用字典树把每一个字符串对应成一个整数 相同的字符串对应到相同的整数上 把所用的串对应的整数放在一个数组里 ...

  6. 二模 (12)day2

    第一题: 题目大意: 有N颗糖,两个人轮流取,每次只能取质数颗,不能取的输.求先取者若必胜,最少需要多少步胜利.(N<=10000) 解题过程: 1.看到N的范围比较小,先打个素数表,然后dp即 ...

  7. uboot启动内核(3)

    nand read.jffs2 0x30007FC0 kernel; 从NAND读出内核:从哪读,从kernel分区 放到哪去   -0x30007FC0 nand read.jffs2 0x3000 ...

  8. tableview 刷新 @property属性的用法

    1.tableView的刷新1> 数据刷新的总体步骤* 修改模型数据* 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法* 全局刷新(每一行都会重新刷新)- (void)reload ...

  9. POJ 1700 F(Contest #3)

    Description A group of N people wishes to go across a river with only one boat, which can at most ca ...

  10. 标签navtab

    创建navtab 创建一个navtab有以下两种方式: 1.Data属性:DOM添加属性data-toggle="navtab"后,单击触发. a链接示例: <a href= ...