Linux中内存缓冲区和缓存有什么区别

  介绍

小编给大家分享一下Linux中内存缓冲区和缓存有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

细心的朋友会注意到,当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为缓存。这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法。那么我来谈谈这个问题

<强>缓存和缓冲区的区别:,,

缓存:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,缓存中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从缓存中直接调用,这样就减少了CPU的等待时间,提高了系统的效率.Cache又分为一级缓存(L1缓存)和二级缓存(L2高速缓存),L1缓存集成在CPU内部,L2高速缓存早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256 kb或512 kb L2高速缓存。
缓冲:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

<强>中自由的缓冲和缓存:(它们都是占用内存):

缓冲:作为缓冲区缓存的内存,是块设备的读写缓冲区
缓存(名词):作为页面缓存的内存,文件系统的缓存
如果缓存(名词)的值很大,说明缓存住的文件数很多。如果频繁访问到的文件都能被缓存(动词)住,那么磁盘的读IO必会非常小。

先来说说<代码> 自由命令

[root@server  ~] #, free  - m   total  used  free  shared  buffers 缓存   Mem: 249, 163, 86, 0, 10, 94   -/+,缓冲/缓存:58,191   交换:511,0,511

其中:

内总存总数
使用已经使用的内存数
自由空闲的内存数
共享多个进程共享的内存总额
缓冲缓冲区缓存和缓存页面缓存磁盘缓存的大小
缓冲/缓存的内存数:-缓冲区缓存使用
+缓冲/缓存的内存数:免费+缓冲+
可缓存用的内存=空闲内存缓存+缓冲+

有了这个基础后,可以得知,我现在使用为163 mb,免费为86年,缓冲和缓存分别为10,94
那么我们来看看,如果我执行复制文件,内存会发生什么变化。

 [root@server  ~] #, cp  -r /etc  ~/测试/(root@server  ~) #, free  - m
  total  used  free  shared  buffers 缓存
  Mem: 249, 244, 4, 0, 8, 174
  -/+,缓冲/缓存:62,187
  交换:511,0,511 

在我命令执行结束后,使用为244 mb,免费为4 mb,缓冲区为8 mb缓存为174 mb,天呐都被缓存吃掉了。别紧张,这是为了提高文件读取效率的做法。
为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要缓存的方式:缓冲区缓存和页面缓存。前者针对磁盘块的读,写后者针对文件inode的读写。这些缓存有效缩短了I/O系统调用(比如读、写、getdents)的时间干净
那么有人说过段时间,Linux会自动释放掉所用的内存,我们使用免费再来试试,看看是否有释放吗?

 [root@server 测试]#,free  - m
  total  used  free  shared  buffers 缓存
  Mem: 249, 244, 5, 0, 8, 174
  -/+,缓冲/缓存:61,188
  交换:511,0,511 

女士没有任何变化,那么我能否手动释放掉这些内存呢? ? ?回答是可以的!
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与内核实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前内核的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:

[root@server测试]#猫/proc/sys/vm/drop_caches
0

首先,/proc/sys/vm/drop_caches的值,默认为0

[root@server测试]#同步
手动执行同步命令(描述:同步命令运行同步子例程。如果必须停止系统,则运行同步命令以确保文件系统的完整性.sync命令将所有未写的系统缓冲区写到磁盘中,包含已修改的索引节点已延迟的块I/O和读写映射文件)

[root@server测试]#回声3比;/proc/sys/vm/drop_caches
[root@server测试]#猫/proc/sys/vm/drop_caches
3

将/proc/sys/vm/drop_caches值设为3

Linux中内存缓冲区和缓存有什么区别