Files
free -m:由於記憶體/緩衝區而減少了可用大小
我正在使用的功能
rosbag
。可以記錄來自其他 ROS 節點的大量數據。總之,它會生成一個巨大的文件,比如一個200MB的文件。ROS
rosbag
生成這樣的文件後,發現系統的buff/cache增加了很多。這是我的擷取:
可以看到,之後
rosbag
,buff/cache
增加了很多,同時free
從 19983 減少到了 10896。我無法理解。據我了解,
free
這意味著 RAM 的可用大小,buff/cache
即記憶體的大小。為什麼記憶體可以使用 RAM 的大小?而且我還發現,如果我刪除生成的文件rosbag
,buff/cache
會從17999恢復到8925。這是系統的動作嗎?什麼時候會buff/cache
增加?什麼時候會buff/cache
減少?
In
free
的輸出:
- “free”表示未使用的記憶體;
- “buff/cache”表示緩衝區(記憶體中等待寫入磁碟的數據)和記憶體(磁碟上的數據,也可以在記憶體中使用)使用的記憶體;
- “available”表示程序可以分配和使用的記憶體量,而不會觸發交換(大多數情況下,您應該關心這個值)。
當一個程序寫入大量數據時,該數據在寫入磁碟之前先進入緩衝區。這些緩衝區會佔用記憶體空間,因此未使用的記憶體量會減少。但是可以使該記憶體可用,因此可用記憶體的數量不會減少。
當您刪除文件時,緩衝區不再需要並被回收(甚至將它們保留為記憶體也沒有意義)。
程序寫入數據時緩衝區增加;當數據寫入磁碟時,它們會減少。當磁碟上的數據在記憶體中可用時記憶體增加(通過從磁碟讀取數據,或將緩衝區轉換為記憶體);當記憶體壓力意味著保留它不再有用時,它會減少。兩者都存在於記憶體中,因此它們的大小會影響可用記憶體的數量;但兩者都可以回收,因此它們的大小不會影響可用記憶體的數量。