**:
我們使用的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伺服器上安裝類似tensorflow以及mindspore這樣的機器學習庫。而安裝之前,首先需要對linux的磁碟的使用有個理解。du 檔名顯示指定檔案的磁碟使用大小 在含有如下檔案的目錄下執行以下命令 前面的數字的單位是什麼呢?是kb du sh顯示當...
了解真實的rem手機螢幕適配
rem 作為乙個低調的長度單位,由於手機端網頁的興起,在螢幕適配中得到重用。使用 rem 前端開發者可以很方便的在各種螢幕尺寸下,通過等比縮放的方式達到設計圖要求的效果。rem 的官方定義 the font size of the root element.即以根節點的字型大小作為基準值進行長度計算...
Linux檢視服務命令與埠使用狀態
開啟終端,執行如下命令,檢視各程序占用埠情況 ps ef wc l 檢視後台執行的程序總數 ps fu csvn 檢視csvn程序 netstat lntp 檢視開啟了哪些埠 netstat r 顯示關於路由表的資訊 netstat a 顯示乙個所有有效連線資訊列表 netstat an grep ...