Files

free -m:由於記憶體/緩衝區而減少了可用大小

  • September 14, 2018

我正在使用的功能rosbag。可以記錄來自其他 ROS 節點的大量數據。總之,它會生成一個巨大的文件,比如一個200MB的文件。ROSrosbag

生成這樣的文件後,發現系統的buff/cache增加了很多。這是我的擷取:

之前rosbag在此處輸入圖像描述

之後rosbag在此處輸入圖像描述

可以看到,之後rosbagbuff/cache增加了很多,同時free從 19983 減少到了 10896。

我無法理解。據我了解,free這意味著 RAM 的可用大小,buff/cache即記憶體的大小。為什麼記憶體可以使用 RAM 的大小?而且我還發現,如果我刪除生成的文件rosbagbuff/cache會從17999恢復到8925。這是系統的動作嗎?什麼時候會buff/cache增加?什麼時候會buff/cache減少?

Infree的輸出:

  • “free”表示未使用的記憶體;
  • “buff/cache”表示緩衝區(記憶體中等待寫入磁碟的數據)和記憶體(磁碟上的數據,也可以在記憶體中使用)使用的記憶體;
  • “available”表示程序可以分配和使用的記憶體量,而不會觸發交換(大多數情況下,您應該關心這個值)。

當一個程序寫入大量數據時,該數據在寫入磁碟之前先進入緩衝區。這些緩衝區會佔用記憶體空間,因此未使用的記憶體量會減少。但是可以使該記憶體可用,因此可用記憶體的數量不會減少。

當您刪除文件時,緩衝區不再需要並被回收(甚至將它們保留為記憶體也沒有意義)。

程序寫入數據時緩衝區增加;當數據寫入磁碟時,它們會減少。當磁碟上的數據在記憶體中可用時記憶體增加(通過從磁碟讀取數據,或將緩衝區轉換為記憶體);當記憶體壓力意味著保留它不再有用時,它會減少。兩者都存在於記憶體中,因此它們的大小會影響可用記憶體的數量;但兩者都可以回收,因此它們的大小不會影響可用記憶體的數量。

引用自:https://unix.stackexchange.com/questions/468934