Linux操做系统中内存buffer和cache的区别 && free 参数说明

咱们一开始,先从Free命令提及。
free 命令相对于top 提供了更简洁的查看系统内存使用状况:
$ free
                     total  used   free  shared  buffers  cached
Mem:         255268 238332 16936 0 85540 126384
-/+ buffers/cache:  26408  228860
Swap:        265000   0    265000
Mem:表示物理内存统计 
-/+ buffers/cached:表示物理内存的缓存统计 
Swap:表示硬盘上交换分区的使用状况,这里咱们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并非第一行free 标记的  16936Kb,它仅表明未被分配的内存。
咱们使用total一、used一、free一、used二、free2 等名称来表明上面统计数据的各值,一、2 分别表明第一行和第二行的数据。
total1:表示物理内存总量。 
used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 
free1:未被分配的内存。 
shared1:共享内存,通常系统不会用到,这里也不讨论。 
buffers1:系统分配但未被使用的buffers 数量。 
cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。 
used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。 
free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
能够整理出以下等式:                      
                     total1  used1   free1  shared1  buffers1  cached1
Mem:         255268 238332 16936         0            85540     126384
                                    used2  free2
-/+ buffers/cache:  26408  228860
 
Swap:        265000   0    265000
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
 
free2 = buffers1 + cached1 + free1
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?
[b]cache 和 buffer的区别:[/b]
[b]Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。[/b]因为CPU的速度远高于主内存,CPU直接从内存中存取数据要等待必定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减小了CPU的等待时间,提升了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期通常是焊在主板上,如今也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
[b]Buffer:缓冲区,一个用于存储速度不一样步的设备或优先级不一样的设备之间传输数据的区域。[/b]经过缓冲区,可使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操做进程不发生间断。
Free中的buffer和cache:(它们都是占用内存):
buffer : 做为buffer cache的内存,是块设备的读写缓冲区
cache: 做为page cache的内存, 文件系统的cache
若是 cache 的值很大,说明cache住的文件数不少。若是频繁访问到的文件都能被cache住,那么磁盘的读IO 必会很是小
 
buffer更靠近存储设备,或者直接就是disk的缓冲区;
cache则是mem的缓冲区;
~~~~~~~~~~~~~~~~~~~~~~~~~~

由于LINUX的内核机制,通常状况下不须要特地去释放已经使用的cache。这些cache起来的内容能够增长文件以及的读写速度。
先说下free命令怎么看内存

[root@yuyii proc]# free
total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608
node

其中第一行用全局角度描述系统使用的内存情况:
total——总物理内存
used——已使用内存,通常状况这个值会比较大,由于这个值包括了cache+应用程序使用的内存
free——彻底未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增长)
cached——缓存,用于已打开的文件
note:
total=used+free
used=buffers+cached (maybe add shared also) 缓存

第二行描述应用程序的内存使用:
前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值
后个值表示+buffers/cache——全部可供应用程序使用的内存大小,free加上缓存值
note:
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached yii

第三行表示swap的使用:
used——已使用
free——未使用 spa

cache释放:
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches 操作系统

说明,释放前最好sync一下,防止丢数据。 进程

Linux操做系统中内存buffer和cache的区别  free 参数说明 - zhuzhu - 津津计较

 

Linux操做系统中内存buffer和cache的区别  free 参数说明 - zhuzhu - 津津计较
相关文章
相关标签/搜索