关于Linux利用的真实内存[Linux安全]
本文“关于Linux利用的真实内存[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
我们利用的Linux和Windows可不太一样,用top号令得出来的大概不是真实利用的内存,用free号令第二行才是系统真实利用的内存.假如发现PHP-CGI把你的内存占满了可不要惶恐哦.
Page cache和buffer cache一向以来是两个对比简单混合的概念,在网上也有很多人在辩论和猜想这两个cache到底有什么辨别,谈论到最后也一向没有一个统一和精确的结论,在我工作的这一段时间,page cache和buffer cache的概念曾经困扰过我,但是细心解析一下,这两个概念实际上非常的清楚.假如可以理解到这两个cache的本质,那么我们在解析io问题的时刻大概会越发得心应手.
Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache.文件的逻辑层需求映射到实际的物理磁盘,这种映射关系由文件系统来完成.当page cache的数据需求革新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作.
Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情形下,直接对磁盘举行操作的数据会缓存到buffer cache中,比方,文件系统的元数据城市缓存到buffer cache中.
简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据.在有文件系统的情形下,对文件操作,那么数据会缓存到page cache,假如直接采取dd等工具对磁盘举行读写,那么数据会缓存到buffer cache.
增补一点,在文件系统层每个设备城市分配一个def_blk_ops的文件操作办法,这是设备的操作办法,在每个设备的inode下面会存在一个 radix tree,这个radix tree下面将会安排缓存数据的page页.这个page的数目将会在top程序的buffer一栏中显示.假如设备做了文件系统,那么会生成一个 inode,这个inode会分配ext3_ops之类的操作办法,这些办法是文件系统的办法,在这个inode下面一样存在一个radix tree,这里会缓存文件的page页,缓存页的数目在top程序的cache一栏举行统计.从上面的解析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache,仅此罢了.
目前不都是只有page cache了吗? buffer pages其实也是page cache里面的页.只是多了一层抽象,通过buffer_head来举行一些拜候管理
对,从Linux算法实现的角度,page cache和buffer cache目前是一样的,但是从功效抽象和具体利用来说,这二者还是存在辨别的,这一点可以从top工具的统计信息中看得出来,关注一下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.
在终端中敲入:free
显示: total used free shared buffers cached
Mem: 255268 238332 16936 0 85540 126384
-/+ buffers/cache:26408 228860
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存并非第一行free 标志的 16936Kb,它仅代表未被分配的内存.
我们利用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 辨别代表第一行和第二行的数据.
total1:表示物理内存总量.
used1:表示总计分配给缓存(包含buffers 与cache )利用的数目,但此中大概部份缓存并未实际利用.
free1:未被分配的内存.
shared1:同享内存,普通系统不会用到,这里也不谈论.
buffers1:系统分配但未被利用的buffers 数目.
cached1:系统分配但未被利用的cache 数目.buffer 与cache 的辨别见背面.
used2:实际利用的buffers 与cache 总量,也是实际利用的内存总量.
free2:未被利用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存.
可以整理出以下等式:
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
free2 = buffers1 + cached1 + free1
以上是“关于Linux利用的真实内存[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |