https://perthcharles.github.io/2015/09/28/wiki-tool-free/
Linux中有許多的檢視系統狀態的命令,但是如果沒有一些相關的背景知識就很容易
造成誤解。free命令就是一個明顯的例子。本系列wiki就結合一些好的資料並
結合自身理解來嘗試剖析一些常用又常被誤解的Linux命令。
從一則free使用例項說開
# free
total used free shared buffers cached
Mem: 16426628 16372464 54164 0 35408 10861984
-/+ buffers/cache: 5475072 10951556
Swap: 32764556 7985476 24779080
第一行和第三行字面意思都好立即,第二行往往很多人不理解。主要是看不懂”-/+ buffers/cache”
到底是什麼鬼。
也正是很多人不理解第二行,往往看到類似上面的free結果後,就認為系統已經沒有空閒記憶體給新程序使用了。
下面給出一個計算公式,基本一看就能懂了。
line1[used] - (line1[buffers] + line1[cached]) = line2[used]
line1[total] - line2[used] = line2[free]
根據例項驗證一下
16372464 - (35408 + 10861984) = 5475072
16426628 - 5475072 = 10951556
那麼當有人問起,看到這樣一個free結果時,系統還有多少可用的空閒記憶體呢(free RAM available) ?
我們的回答應該是line2[free]而不是line1[free]。下面會詳細解釋。
buffers和cached到底是什麼
buffers是被一個特定程序使用的用於臨時存放資料的記憶體空間,這些內容不會被其他程序訪問。
這篇文章用了頻寬的概念來
類比,非常貼切。
當你試圖透過網路傳送大量的突發資料時,如果網路卡的頻寬(capacity)僅支援傳送一部分時,
它會將剩下的資料存在buffers中,用於後續傳送。
而cached用於存放頻繁訪問的一些資料,目的是做到更快的資料訪問。
比如多個程序需要讀同一個檔案,此時記憶體可能就分配一片cached區域,用於作為CPU到磁碟
之間的cache。
buffers和cached的區別:
a. buffers是供單個程序使用的,而cached可供多個程序使用
b. buffers是一次性的,而cached是可以反覆使用的
buffers和cached的共同之處就在於它們都是臨時性的儲存,如果後續有程序需要使用
這些記憶體空間,Linux會釋放(free)這些臨時性佔用的記憶體。
swap分割槽
swap分割槽的目的是將一些不被頻繁訪問的記憶體資料放到磁碟,但是當需要時又能儘快的恢復到記憶體中去
參考資料
Understanding free command in Linux/Unix
Linux ate my ram! Don’t Panic! Your ram is fine!
Experiments and fun with the Linux disk cache