Linux

在Linux中,free命令上報的“buffers”和“cache”有什麼區別?

  • October 14, 2017

這是我不時看到的一個老問題。我對它的理解相當有限(很久以前就讀過這些差異,但所涉及的事實從未真正陷入困境)。

據我了解,

  • 緩衝器

由具有活動 I/O 操作的程序使用,即等待寫入磁碟的數據

  • 記憶體

是已完成 I/O 操作的結果,即已刷新緩衝區或從磁碟讀取數據以滿足請求。

後人能得到一個明確的解釋嗎?

“記憶體”總數還將包括一些其他記憶體分配,例如任何 tmpfs 文件系統。要查看此效果,請嘗試:

mkdir t
mount -t tmpfs none t
dd if=/dev/zero of=t/zero.file bs=10240 count=10240
sync; echo 3 > /proc/sys/vm/drop_caches; free -m
umount t
sync; echo 3 > /proc/sys/vm/drop_caches; free -m

並且您將看到復製到基於 ram 的文件系統的 100Mb 的“記憶體”值下降(假設有足夠的空閒 RAM,如果機器已經過度送出,您可能會發現其中一些最終以交換方式結束記憶體使用)。每次呼叫 free 之前的 “sync; echo 3 > /proc/sys/vm/drop_caches” 應該在所有寫緩衝區(同步)中寫入任何掛起的內容,並從記憶體中清除所有記憶體/緩衝的磁碟塊,這樣 free 只會讀取其他“記憶體”值中的分配。

虛擬機(例如在 VMWare 下執行的那些)使用的 RAM 也可能計入免費的“記憶體”值,目前打開的記憶體映射文件使用的 RAM 也會計入(這取決於您使用的管理程序/版本和也可能在核心版本之間)。

因此,它不像“緩衝區計數掛起的文件/網路寫入和記憶體計數最近讀取/寫入 RAM 中保存的塊以保存將來的物理讀取”那麼簡單,儘管對於大多數目的,這個更簡單的描述可以做到。

引用自:https://serverfault.com/questions/23433