《你知道在Linux中内存buffer和cache的区别?.doc》由会员分享,可在线阅读,更多相关《你知道在Linux中内存buffer和cache的区别?.doc(6页珍藏版)》请在三一文库上搜索。
1、你知道在Linux中内存buffer和cache的区别?细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.先来说说free命令rootserver # free -m totalusedfreesharedbufferscachedMem:24916386010 94-/+ buffers/cache:58191Swap:5110 511其中:total 内存总数used 已经使用的内存数free 空闲的内存数shared
2、 多个进程共享的内存总额buffers Buffer Cache和cached Page Cache 磁盘缓存的大小-buffers/cache 的内存数:used - buffers - cached+buffers/cache 的内存数:free + buffers + cached可用的memory=free memory+buffers+cached有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94那么我们来看看,如果我执行复制文件,内存会发生什么变化.rootserver # cp -r /etc /test/rootse
3、rver # free -m totalusedfreesharedbufferscachedMem:249244408 174-/+ buffers/cache:62187Swap:5110 511在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对
4、磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放?rootserver test# free -m totalusedfreesharedbufferscachedMem:249244508 174-/+ buffers/cache:61188Swap:5110 511MS没有任何变化,那么我能否手动释放掉这些内存呢?回答是可以的!/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进
5、行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:rootserver test# cat /proc/sys/vm/drop_caches0首先,/proc/sys/vm/drop_caches的值,默认为0rootserver test# sync手动执行sync命令(描述:sync命令运行sync子例程。如果必须停止系统,则运行sync命令以确保文件系统的完整性。sync命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O
6、和读写映射文件)rootserver test# echo 3 /proc/sys/vm/drop_cachesrootserver test# cat /proc/sys/vm/drop_caches3将/proc/sys/vm/drop_caches值设为3rootserver test# free -m totalusedfreesharedbufferscachedMem:2496618200 11-/+ buffers/cache:55194Swap:5110 511再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11M
7、B.那么有效的释放了buffer和cache.有关/proc/sys/vm/drop_caches的用法在下面进行了说明/proc/sys/vm/drop_caches (since Linux 2.6.16)Writingtothisfilecauses the kernel to drop clean caches,dentries and inodes from memory, causing that memorytobecomefree.Tofreepagecache,useecho 1 /proc/sys/vm/drop_caches; tofree dentries and in
8、odes, use echo 2 /proc/sys/vm/drop_caches;tofreepagecache,dentriesandinodes,useecho3/proc/sys/vm/drop_caches.Because this is a non-destrucTIve operaTIonanddirtyobjectsare not freeable, the user should run sync(8) first.=buffer与cache的区别A buffer is something that has yet to be written to disk. A cache
9、 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与主内存间的一种容量较小但速度很高的存储器。
10、由于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:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少
11、,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。Free中的buffer和cache:(它们都是占用内存):buffer :作为buffer cache的内存,是块设备的读写缓冲区cache:作为page cache的内存,文件系统的cache如果cache的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。=cache是高速缓存,用于CPU和内存之间的缓冲;buffer是I/O缓存,用于内存和硬盘的缓冲cache最初用于cpu cache, 主要原因是cpu 与memory, 由于cpu快,memory跟不上,且
12、有些值使用次数多,所以放入cache中,主要目的是,重复使用, 并且一级二级物理cache速度快,buffer主要用于disk与 memory,主要是保护硬盘或减少网络传输的次数(内存数据表现dataSet)当然也可以提高速度(不会立即写入硬盘或直接从硬盘中读出的数据马上显示),重复使用,最初最主要的目的是保护disk,asp的cache有outputcahe与数据cache, 主要目的是重复使用,提高速度,outputcache主要存储Reader后的页,一般是多次使用同一个HTML,建议不要varybyparam,不要存多version,数据cache,如dataSet, dataTabl
13、e, 等page buffer=true, 使用buffer,让buffer满后再显示读出或写入,(c中文件输出也是如此,主要目的是保护硬盘), 也可以提高下次的访问速度. 在client browse端表现是: true是一次性显示,要么不显示, 中间等, false是一次显示一些,这在网络输出也是如此表现.对于文件访问c中默认采用的是buffer = true, 这与asp一样,相当于Response.write();中当buffer满后输出,以减少网络的传输次数, 是将asp生成的HTML缓存起来,在指定的时间内不需要重新生成html, control.ascx.也有组件缓存(htmlC
14、ach)。 dataSet也是如此。DataCache,cache和buffer都是缓冲区, 在翻译上,cache翻译成高速缓冲区要好一点(因为主要是为下次访问加速), buffer翻译成缓冲区好点。都是缓冲的作用,可目的有点不同,主要是理解,不需要太咬文嚼字.cache 和 buffer的区别1, Buffer是缓冲区2, Cache 是高速缓存,分library cache; data dicTIonary cache; database buffercacheBuffer cache 缓冲区高速缓存,用于缓存从硬盘上读取的数据,减少磁盘I/O.3, buffer有共享SQL区和PL/SQ
15、L区 , 数据库缓冲区高速缓存有独立的subcache4, pool 是共享池 用于存储最近执行的语句等5, cache:A cache is a smaller, higher-speed component that is used to speed up theaccess to commonly used data stored in a lower-speed, higher-capacitycomponent. database buffer cache:The database buffer cache is the porTIon of the SGA that holds c
16、opies of datablocksread from data files. All user processes concurrently (同时地,兼任地)connectedto the instance share access to the database buffer cache.buffer cache就是以block为单位读入写出的。缓存(cache)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。缓冲(buff
17、ers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0100,数字越大越倾向于使用swap。默认为60,可以改一下试试。-
18、两者都是RAM中的数据。简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。buffer是由各种进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。A buffer is something that has yet to be written to disk. A cache issomething that has been rea
19、d 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直接从内存中存取数据
20、要等待一定时间周期, Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进
21、程不发生间断。Free中的buffer和cache:(它们都是占用内存):buffer : 作为buffer cache的内存,是块设备的读写缓冲区cache: 作为page cache的内存, 文件系统的cache如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。=# sync# echo 1 /proc/sys/vm/drop_cachesecho 2 /proc/sys/vm/drop_cachesecho 3 /proc/sys/vm/drop_cachescache释放:To free pagecache:echo 1 /proc/sys/vm/drop_cachesTo free dentries and inodes:echo 2 /proc/sys/vm/drop_cachesTo free pagecache, dentries and inodes:echo 3 /proc/sys/vm/drop_caches说明,释放前最好sync一下,防止丢数据。因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。
链接地址:https://www.31doc.com/p-3381813.html