Linux 内存 buffer 和 cache 的区别(转载)

标签: linux 内存 buffer | 发表时间:2015-01-18 02:13 | 作者:zhangxiong0301
出处:http://www.iteye.com

一. 内存使用说明

 

Free 命令相对于top 提供了更简洁的查看系统内存使用情况:

 

[root@rac1 ~]# free 

             total       used       free     shared    buffers     cached

Mem:        1035108    1008984      26124      0     124212     413000

-/+ buffers/cache:        471772      563336

Swap:       2096472   842320     1254152

 

这里显示的单位是KB。

 

       在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。有关Linux内存机制参考:

       Linux 内存机制

        http://blog.csdn.net/tianlesoftware/archive/2010/04/08/5463790.aspx

 

Mem:表示物理内存统计。
-/+ buffers/cached:表示物理内存的缓存统计 
Swap:表示硬盘上交换分区的使用情况。只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap。

 

Mem 行(第一行)数据说明:

       Total:1035108KB。表示物理内存总大小。

       Used:1008984KB。表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

       Free:26124KB。表示未被分配的内存。

       Shared:0kb。共享内存,一般系统不会用到。

       Buffers:124212KB。系统分配但未被使用的buffers 数量。

       Cached:413000KB。系统分配但未被使用的cache 数量。

 

-/+ buffers/cache 行(第二行)数据说明:

       Used:471772kb,实际使用的buffers 与cache 总量,也是实际使用的内存总量。

       Free: 563336kb, 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

 

根据以上分析,可以得出一下结论:

1.  实际可用内存大小:

       Free(-/+ buffers/cache行)= Free(Mem)+buffers(Mem)+Cached(Mem);

                                   563336 = 26124 + 124212+ 413000

 

2.  已经分配的内存大小:

       Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)

              1008984kb = 471772 + 124212 +413000

 

3.  物理内存总大小

       total(Mem) = used(-/+ buffers/cache) + free(-/+ buffers/cache)

                     1035108 = 471772 + 563336

 

 

二.  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.

 

2.1 Cache

       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。

2.2 Buffer

       Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

 

在Free命令中显示的buffer和cache,它们都是占用内存:

       buffer : 作为buffer cache的内存,是块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区。

       cache: 作为page cache的内存, 文件系统的cache,是memory的缓冲区

 

       如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小。

 

 

 

整理自:

http://www.linuxdiyf.com/blog/?90293/action_viewspace_itemid_3004.html



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [linux 内存 buffer] 推荐:

Linux 内存 buffer 和 cache 的区别(转载)

- - 操作系统 - ITeye博客
Free 命令相对于top 提供了更简洁的查看系统内存使用情况:.        在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快.        Linux 内存机制.

Oracle 如何强制刷新Buffer Cache

- - 数据库 - ITeye博客
  在Oracle9i里,Oracle提供了一个内部事件,用以强制刷新Buffer Cache,其语法为:.   类似的也可以使用alter system系统级设置:.   在Oracle 10g中,Oracle提供一个新的特性,可以通过如下命令刷新Buffer Cache:.   我们通过试验来看一下刷新Cache的作用:.

Google Protocol Buffer 简单介绍 - zhanjindong

- - 博客园_首页
以下内容主要整理自 官方文档. 为什么使用 Protocol Buffers. Protocol Buffers 语法. 为什么使用 Protocol Buffers. 通常序列化和解析结构化数据的几种方式. 使用Java默认的序列化机制. 这种方式缺点很明显:性能差、跨语言性差. 将数据编码成自己定义的字符串格式.

Linux虚拟内存实现原理

- Sepher - NoSQLFan
下面是一篇翻译文章,原文出自MongoDB的核心开发工程师 Kristina Chodorow 的个人博客,由NoSQLFan翻译整理. 我们都知道,MongoDB 使用内存映射的方式来进行数据文件的存取操作. 本文的目的就在于描述操作系统虚拟内存的使用及内存映射的内部实现. 当你运行一个程序,程序中有许多东西需要存储,堆、栈以及各种功能库.

Linux Used内存到底哪里去了?

- - 非业余研究
原创文章,转载请注明: 转载自 非业余研究. Linux Used内存到底哪里去了. 前几天 纯上 同学问了一个问题:. 我ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了7,8G了,已经开始swap了,请问ps aux的实际物理内存统计是不是漏了哪些内存没算. 我有什么办法确定free中used的内存都去哪儿了呢.

Linux系统查看内存使用率

- - BlogJava-qileilove
Linux下看内存和CPU使用率一般都用top命令,但是实际在用的时候,用top查看出来的内存占用率都非常高,如:.   top –M看更直观,以M为单位.   接近98.7%,而实际上的应用程序占用的内存往往并没这么多,.   看%MEM这列的数字,按内存排序后,把前几名加起来,撑死了才不过55%,那剩下的内存都干嘛用了.

Linux与JVM的内存关系分析

- - 美团技术团队
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m. 从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示. 同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了.

数据读取之逻辑读简单解析--关于BUFFER CACHE

- - CSDN博客数据库推荐文章
数据读取之逻辑读简单解析--BUFFER CACHE. 一、实验数据准备--查出一条数据的ROWID,及FILE_ID,BLOCK_ID等信息. 使用下面语句查出相应行的FILE_ID,BLOCK_ID,关于ROWID,详见:http://blog.csdn.net/q947817003/article/details/11490051.

TCP性能和发送接收窗口、Buffer的关系 | plantegg

- -
本文希望解析清楚,当我们在代码中写下 socket.setSendBufferSize 和 sysctl 看到的rmem/wmem系统参数以及最终我们在TCP常常谈到的接收发送窗口的关系,以及他们怎样影响TCP传输的性能,同时如何通过图形来展示哪里是传输瓶颈. 拥塞窗口相关文章比较多,他们跟带宽紧密相关,所以大家比较好判断,反而是接收、发送窗口一旦出现瓶颈,就没这么好判断了.

(总结)关于Linux的缓存内存 Cache Memory详解

- d0ngd0ng - 服务器运维与网站架构|Linux运维|互联网研究
前天有朋友问我,为啥我的Linux系统没运行多少程序,显示的可用内存这么少. 其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做Cache Memory. 有时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存free项会很少,此时查看系统的 /proc/meminfo 文件,会发现有一项 Cached Memory:.