Linux系統所使用的真實記憶體

來源:互聯網
上載者:User

我們使用的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社區

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.