Linux free中buffer與cache區別
一、free命令
# free -m
total used free shared buffers cached
Mem: 3072 2459 612 0 207 1803
-/+ buffers/cache: 447 2624
Swap: 1913 0 1913
第2行:
total 記憶體總數 3072
used 已使用的記憶體數 2459
free 空閒的記憶體數 612
shared 當前已經廢棄不用,總是0
buffers Buffer Cache記憶體數 13220
cached Page Cache記憶體數 2720160
關係 total = used + free
第3行:
-/+ buffers/cache的意思:
-buffers/cache 的記憶體數: 447 (等於第1行的 used - buffers - cached)
+buffers/cache 的記憶體數: 2624 (等於第1行的 free + buffers + cached)
注:略出入。
可見-buffers/cache反映的是被程式實實在在吃掉的記憶體,而+buffers/cache反映的是可以挪用的記憶體總數。
第4行單獨針對交換分割槽。
為了提高磁碟存取效率, Linux做了一些精心的設計, 除了對dentry進行快取(用於VFS,加速檔案路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫。這些Cache有效縮短了 I/O系統呼叫(如read,write,getdents)的時間。
第2行(mem)的used/free與第3行(-/+ buffers/cache) used/free的區別:
這
兩個的區別在於使用的角度.第2行是從OS的角度來看,因為對於OS,buffers/cached
都是屬於被使用,所以他的可用記憶體是612MB,已用記憶體是2059MB,其中包括,核心(OS)使用+Application(X,
oracle,etc)使用的+buffers+cached.
第3行
所指的是從應用程式角度來看,對於應用程式來說,buffers/cached
是可用的,因為buffer/cached是為了提高檔案讀取的效能而設,當應用程式要用到記憶體的時候,buffer/cached會很快地被回收。所以
從應用程式的角度來說,可用記憶體=系統free memory+buffers+cached.
如上例:
2624 = 612+207+1803
二、buffers與cached的區別:
buffers 是用來給塊裝置做的緩衝大小,他只記錄檔案系統的metadata以及 tracking in-flight pages。
cached 是用來給檔案做緩衝。
即:buffers是用來儲存目錄裡面有什麼內容,許可權等等,而cached用來記憶我們開啟的檔案.
如果你想知道他是不是真的生效,你可以試一下,先後執行兩次命令#man kill ,你就可以明顯的感覺到第二次的開打的速度快很多。
實驗:在一臺沒有什麼應用的機器上做會看得比較明顯。記得實驗只能做一次,如果想多做請換一個檔名。
#free
#man kill
#free
#man kill
#free
比較一下free先後顯示的buffers的大小。
另一個實驗:
#free
#ls /dev
#free
比較一下兩個的大小,當然這個buffers隨時都在增加,但有ls過的話,增加的速度會變得快,這個就是buffers/chached的區別。
因為Linux會將暫時不使用的記憶體作為檔案和資料快取,以提高系統效能,當應用程式需要這些記憶體時,系統會自動釋放(不像windows那樣,即使你有很多空閒記憶體,他也要訪問一下磁碟中的pagefiles)
記憶體交換條件及方式:
當可用記憶體小於額定值的時候,就會開始進行交換.
如何看額定值(RHEL4.0)
#cat /proc/meminfo
交換將透過三個途徑來減少系統中使用的物理頁面的個數:
1.減少緩衝與頁面cache的大小;
2.將系統V型別的記憶體頁面交換出支;
3.換出或者丟棄頁面。(Application 佔用的記憶體頁,也就是實體記憶體不足)。
事實上,少量地使用swap是不會影響到系統效能的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26812308/viewspace-2121492/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux cache與buffer的區別Linux
- buffer與cache的區別
- Buffer 與 Cache 的區別
- Linux Buffer/Cache 的區別Linux
- buffer 與cache 的區別2
- latch free 中 cache buffer chain 的整理AI
- Buffer和Cache的區別
- Cache 和 Buffer的區別
- Linux記憶體管理機制中buffer和cache的區別Linux記憶體
- Linux作業系統中記憶體buffer和cache的區別Linux作業系統記憶體
- Cache 和 Buffer 有什麼區別?
- Cache 和 Buffer 的區別在哪裡?
- 轉貼_大牛_tolywang_Buffer 與 Cache 的區別
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux
- Ask Hoegh(5)——buffer cache和buffer有什麼區別?
- Linux作業系統中記憶體buffer和cache的區別(轉載)Linux作業系統記憶體
- buffer cache實驗8-free buffer waits-完成AI
- linux系統中的Cache和BufferLinux
- linux cache and buffer【轉】Linux
- page cache與buffer cache的關係
- free 與 CFRelease 的區別
- 計算機buffer和cache的區別?linux運維學習知識計算機Linux運維
- 【linux】free命令中cached和buffers的區別Linux
- Linux free 命令中cached 和 buffers 的區別Linux
- 記憶體中,cache與buffer的含義記憶體
- Linux下的快取機制free及清理buffer/cache/swap的方法梳理Linux快取
- oracle buffer cache管理機制_buffer cache dump與lru機制小記Oracle
- Buffer Cache Size(資料緩衝區)
- create table中的buffer pool 設定 KEEP 及CACHE 引數的聯絡及區別
- PostgreSQL DBA(89) - Linux(Buffer vs Cache)SQLLinux
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- linux中記憶體使用,swap,cache,buffer的含義Linux記憶體
- buffer busy waits, latch cache buffers chains, read by other session區別AISession
- Buffer Cache 原理
- cache buffer chainAI
- Oracle中flush buffer cache和x$bhOracle
- linux中fork()與vfork()的區別Linux
- IO之核心buffer----"buffer cache"