時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
我們使用的Linux和Windows可不太一樣,用top命令得出來的可能不是真實(shí)使用的內(nèi)存,用free命令第二行才是系統(tǒng)真實(shí)使用的內(nèi)存。如果發(fā)現(xiàn)PHP-CGI把你的內(nèi)存占滿了可不要驚慌哦。
Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網(wǎng)上也有很多人在爭辯和猜想這兩個cache到底有什么區(qū)別,討論到最后也一直沒有一個統(tǒng)一和正確的結(jié)論,在我工作的這一段時間,page cache和buffer cache的概念曾經(jīng)困擾過我,但是仔細(xì)分析一下,這兩個概念實(shí)際上非常的清晰。如果能夠了解到這兩個cache的本質(zhì),那么我們在分析io問題的時候可能會更加得心應(yīng)手。
Page cache實(shí)際上是針對文件系統(tǒng)的,是文件的緩存,在文件層面上的數(shù)據(jù)會緩存到page cache。文件的邏輯層需要映射到實(shí)際的物理磁盤,這種映射關(guān)系由文件系統(tǒng)來完成。當(dāng)page cache的數(shù)據(jù)需要刷新時,page cache中的數(shù)據(jù)交給buffer cache,但是這種處理在2.6版本的內(nèi)核之后就變的很簡單了,沒有真正意義上的cache操作。
Buffer cache是針對磁盤塊的緩存,也就是在沒有文件系統(tǒng)的情況下,直接對磁盤進(jìn)行操作的數(shù)據(jù)會緩存到buffer cache中,例如,文件系統(tǒng)的元數(shù)據(jù)都會緩存到buffer cache中。
簡單說來,page cache用來緩存文件數(shù)據(jù),buffer cache用來緩存磁盤數(shù)據(jù)。在有文件系統(tǒng)的情況下,對文件操作,那么數(shù)據(jù)會緩存到page cache,如果直接采用dd等工具對磁盤進(jìn)行讀寫,那么數(shù)據(jù)會緩存到buffer cache。
補(bǔ)充一點(diǎn),在文件系統(tǒng)層每個設(shè)備都會分配一個def_blk_ops的文件操作方法,這是設(shè)備的操作方法,在每個設(shè)備的inode下面會存在一個 radix tree,這個radix tree下面將會放置緩存數(shù)據(jù)的page頁。這個page的數(shù)量將會在top程序的buffer一欄中顯示。如果設(shè)備做了文件系統(tǒng),那么會生成一個 inode,這個inode會分配ext3_ops之類的操作方法,這些方法是文件系統(tǒng)的方法,在這個inode下面同樣存在一個radix tree,這里會緩存文件的page頁,緩存頁的數(shù)量在top程序的cache一欄進(jìn)行統(tǒng)計。從上面的分析可以看出,2.6內(nèi)核中的buffer cache和page cache在處理上是保持一致的,但是存在概念上的差別,page cache針對文件的cache,buffer是針對磁盤塊數(shù)據(jù)的cache,僅此而已。
現(xiàn)在不都是只有page cache了嗎? buffer pages其實(shí)也是page cache里面的頁。只是多了一層抽象,通過buffer_head來進(jìn)行一些訪問管理
對,從Linux算法實(shí)現(xiàn)的角度,page cache和buffer cache目前是一樣的,但是從功能抽象和具體應(yīng)用來講,這兩者還是存在區(qū)別的,這一點(diǎn)可以從top工具的統(tǒng)計信息中看得出來,關(guān)注一下buffer和cache這兩個統(tǒng)計量。
增加一些資料:
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
系統(tǒng)的總物理內(nèi)存:255268Kb(256M),但系統(tǒng)當(dāng)前真正可用的內(nèi)存并不是第一行free 標(biāo)記的 16936Kb,它僅代表未被分配的內(nèi)存。
我們使用total1、used1、free1、used2、free2 等名稱來代表上面統(tǒng)計數(shù)據(jù)的各值,1、2 分別代表第一行和第二行的數(shù)據(jù)。
total1:表示物理內(nèi)存總量。
used1:表示總計分配給緩存(包含buffers 與cache )使用的數(shù)量,但其中可能部分緩存并未實(shí)際使用。
free1:未被分配的內(nèi)存。
shared1:共享內(nèi)存,一般系統(tǒng)不會用到,這里也不討論。
buffers1:系統(tǒng)分配但未被使用的buffers 數(shù)量。
cached1:系統(tǒng)分配但未被使用的cache 數(shù)量。buffer 與cache 的區(qū)別見后面。
used2:實(shí)際使用的buffers 與cache 總量,也是實(shí)際使用的內(nèi)存總量。
free2:未被使用的buffers 與cache 和未被分配的內(nèi)存之和,這就是系統(tǒng)當(dāng)前實(shí)際可用內(nèi)存。
可以整理出如下等式:
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
free2 = buffers1 + cached1 + free1
關(guān)鍵詞標(biāo)簽:Linux使用的真實(shí)內(nèi)存
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內(nèi)存型號 linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載