`
javathinker
  • 浏览: 227511 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Linux free -m 详细说明

 
阅读更多
linux内存中buffer与cache的区别
  free 命令相对于top 提供了更简洁的查看系统内存使用情况:
$ free
total<wbr><wbr><wbr><wbr><wbr><wbr>used<wbr><wbr><wbr><wbr><wbr><wbr><wbr>free<wbr><wbr><wbr>shared buffers cached<br> Mem:<wbr><wbr><wbr>255268<wbr><wbr><wbr><wbr><wbr>238332<wbr><wbr><wbr><wbr><wbr>16936<wbr><wbr><wbr><wbr><wbr><wbr>0<wbr><wbr>85540<wbr><wbr>126384<br> -/+ buffers/cache: 26408<wbr><wbr><wbr><wbr><wbr><wbr>228860<br> Swap:<wbr><wbr>265000<wbr><wbr><wbr><wbr><wbr>0<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>265000</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
  Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
  total1:<wbr><wbr><wbr>表示物理内存总量。<br> used1:<wbr><wbr><wbr><wbr>表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。<br> free1:<wbr><wbr><wbr><wbr>未被分配的内存。<br> shared1:<wbr><wbr>共享内存,一般系统不会用到,这里也不讨论。<br> buffers1: 系统分配但未被使用的buffers 数量。<br> cached1:<wbr><wbr>系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
used2:<wbr><wbr><wbr><wbr>实际使用的buffers 与cache 总量,也是实际使用的内存总量。<br> free2:<wbr><wbr><wbr><wbr>未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
  可以整理出如下等式:
total1 = used1 + free1
total1 = used2 + free2
used1<wbr><wbr>= buffers1 + cached1 + used2<br> free2<wbr><wbr>= buffers1 + cached1 + free1</wbr></wbr></wbr></wbr>
  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.
  更详细的解释参考:Difference Between Buffer and Cache
对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣, 请参考:What is Shared Memory?
  cache 和 buffer的区别:
Cache: 高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周 期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提 高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
  Free中的buffer和cache:(它们都是占用内存):
buffer: 作为buffer cache的内存,是设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
  如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。
Buffer和Cache的区别
<wbr><wbr><wbr>缓存(cached)是<strong><span style="color:#0000FF; word-wrap:normal; word-break:normal">把读取过的数据</span></strong>保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。</wbr></wbr></wbr>
<wbr><wbr><wbr>缓冲(buffers)是根据<strong><span style="color:#0000FF; word-wrap:normal; word-break:normal">磁盘的读写</span></strong>设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定 期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的 灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。</wbr></wbr></wbr>

修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。
两者都是RAM中的数据。简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
buffer是由各种进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。
cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。

Linux的内存管理,实际上跟windows的内存管理有很相像的地方,都是用虚拟内存这个的概念,说到这里不得不骂MS,为什么在很多时候还有很大的物理内存的时候,却还是用到了pagefile. 所以才经常要跟一帮人吵着说Pagefile的大小,以及如何分配这个问题,在Linux大家就不用再吵什么swap大小的问题,我个人认为,swap设个512M已经足够了,如果你问说512M的SWAP不够用怎么办?只能说大哥你还是加内存吧,要不就检查你的应用,是不是真的出现了memory leak.

在Linux下查看内存我们一般用command free
[root@nonamelinux ~]# free
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>total<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>used<wbr><wbr><wbr><wbr><wbr><wbr>free<wbr><wbr><wbr><wbr>shared<wbr><wbr><wbr>buffers<wbr><wbr><wbr><wbr>cached<br> Mem:<wbr><wbr><wbr>386024<wbr><wbr><wbr><wbr><wbr><span style="word-wrap:normal; word-break:normal; background-color:rgb(111,168,220)"><span style="color:#00FF00; word-wrap:normal; word-break:normal">377116</span></span><wbr><wbr><wbr><wbr><span style="color:#0000FF; word-wrap:normal; word-break:normal; background-color:rgb(255,0,255)"><strong>8908<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong><span style="color:#000000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,255)">0<wbr><wbr><wbr></wbr></wbr></wbr></span><strong><wbr><wbr><wbr><wbr><wbr><wbr><wbr>21280<wbr><wbr><wbr><wbr>155468<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong></span>-/+ buffers/cache:<wbr><wbr><wbr><wbr>200368<wbr><wbr><wbr><span style="color:#FF0000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,0)"><strong>185656</strong></span><br> Swap:<wbr><wbr><wbr>393552<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>0<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>393552<br> 下面是对这些数值的解释:<br> 第二行(mem):<br> total:总计物理内存的大小。<br> used:已使用多大。<br> free:可用有多少。<br> Shared:多个进程共享的内存总额。<br> Buffers/cached:磁盘缓存的大小。<br> 第三行(-/+ buffers/cached):<br> used:已使用多大。<br> free:可用有多少。<br> 第四行就不多解释了。<br> 区别:<br> 第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。<br> 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.<br> 第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。<br> 所以从应用程序的角度来说,可用内存=系统free( memory+buffers+cached.)<br> 如上例:<br><strong><span style="color:#0000FF; word-wrap:normal; word-break:normal; background-color:rgb(255,0,255)"><span style="color:#FF0000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,0)">185656</span><span style="color:#000000; word-wrap:normal; word-break:normal; background-color:rgb(255,255,255)">=</span>8908+21280+155468</span></strong><br> 接下来解释什么时候内存会被交换,以及按什么方交换。<br> 当可用内存少于额定值的时候,就会开会进行交换.<br> 如何看额定值(RHEL4.0):<br> #cat /proc/meminfo<br> 交换将通过三个途径来减少系统中使用的物理页面的个数: <br> 1.减少缓冲与页面cache的大小,<br> 2.将系统V类型的内存页面交换出去, <br> 3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。<br> 事实上,少量地使用swap是不是影响到系统性能的。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

分享到:
评论

相关推荐

    Linux free命令用法详解

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

    Linux进阶指令

    Linux进阶指令 du指令 作用:du表示directory used,显示出目录所占的磁盘空间大小的情况 语法:#du -sh 目录路径 选项说明: -s:表示summary,汇总统计 -h:表示以较高可读性的形式显示 df指令 作用:disk free,...

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

    ◆ 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab; ◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup; ◆ 系统...

    Linux命令大全(CHM格式离线版)

    进行重新编译的说明 文件传输 bye ftp ftpcount ftpshut ftpwho ncftp tftp uucico uucp uupick uuto 备份压缩 ar bunzip2 bzip2 bzip2recover compress cpio dump gunzip gzexe gzip lha restore tar unarj unzip ...

    linux内核 0.11版本源码 带中文注释

    主要说明了-个 // 类型(va_list)和三个宏(va_start, va_arg 和va_end),vsprintf、 // vprintf、vfprintf。 #include #include &lt;fcntl.h&gt; // 文件控制头文件。用于文件及其描述符的操作控制常数符号的定义。 #...

    grub4dos-V0.4.6a-2017-02-04更新

    更新说明: 2017-02-04(yaya) Ls command: Empty Folder returns false. 2016-12-08(yaya) 修正lz4、vhd不显示解压缩进度指示。增加lzma解压缩进度指示。 2016-11-09(不点) 0x8205 bit 5 = 1: 使checkkey...

    Linux命令大全

    进行重新编译的说明 文件传输 bye ftp ftpcount ftpshut ftpwho ncftp tftp uucico uucp uupick uuto 备份压缩 ar bunzip2 bzip2 bzip2recover compress cpio dump gunzip gzexe gzip lha restore tar unarj unzip ...

    Linux测试加压工具auto_utilization.zip

    一个测试套件实现了对linux系统资源使用率的设定,目前版本包含: 1. cpu_limit实现了linux操作系统内在指定的cpu各核心上分别占用指定的cpu利用率; 2. memory_limit实现了linux操作系统内占用一定的内存使得...

    服务器运维管理手册.doc

    XXXX有限公司 服务器运维管理手册 XXXX有限... 内存监控(free -m) 描述: total:总计物理内存的大小 used:已使用多大 free:可用有多少 shared:多个进程共享的内存总额 buffers/cached:磁盘缓存的大小。 第三行(-/+ buf

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windows平台下VC6.0开发环境下的使用作出描述。 虽然oSIP的开发人员也说明了...

    ROS电子盘复制工具DDCOPY_1.5_liunx硬盘备份img工具

    我用ddcopy对双硬盘linux7.3对拷,拷贝时间大概花了2个半小时,硬盘大小36G,数据完整是最重要的,时间花得多些也值。  ddcopy特点: (1)彻底的硬盘拷贝 (2)坏伞区拷贝 (3)支持单硬盘容量最大2TB (4...

    AT91SAM9263开发板SBC6300X.rar

    Cat,chmod,discard,echo,flashwrite,flashfsd,free,genhtml,init,kill,loader,Ls,mkdir,mount,ps,reboot,rm,smanaged,sysconf,yes,insmod,lsmod,rmmod 《ADI参考电路》限时下载!奖励300信元! 点评 回复 支持 反对 ...

    vc++ 开发实例源码包

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    orcale常用命令

    依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。 下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL&gt;select username...

    C/C++笔试题(附答案,华为面试题系列)

    (请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它...

Global site tag (gtag.js) - Google Analytics