free -m:由于缓存/缓冲而减少了可用大小

free -m:由于缓存/缓冲而减少了可用大小

rosbag我正在使用的功能ROS.rosbag可以记录来自其他ROS节点的大量数据。总的来说,它会生成一个巨大的文件,比如200MB的文件。

生成这样的文件后,我发现系统的buff/cache增加了很多。这是我的捕获:

rosbag在此输入图像描述

rosbag在此输入图像描述

可以看到,之后rosbagbuff/cache增加了很多,同时,free从19983减少到了10896。

我无法理解。据我了解,free指的是RAM的可用大小,buff/cache即缓存的大小。为什么缓存可以使用RAM的大小?而且我还发现,如果删除了生成的文件rosbagbuff/cache就会从17999恢复到8925。这是系统的行为吗?什么时候会buff/cache增加?什么时候会buff/cache减少?

答案1

Infree的输出:

  • “free”表示未使用的内存;
  • “buff/cache”表示缓冲区(内存中等待写入磁盘的数据)和缓存(磁盘上的数据在内存中也可用)使用的内存;
  • “可用”表示进程可以分配和使用而不需要交换的内存量(大多数时候您应该关心这个值)。

当进程写入大量数据时,这些数据在写入磁盘之前会先进入缓冲区。这些缓冲区占用内存空间,因此未使用的内存量会减少。但该内存可以变得可用,因此可用内存量不会减少。

当您删除文件时,缓冲区不再需要并被回收(甚至将它们保留为缓存也没有意义)。

当进程写入数据时,缓冲区会增加;当数据写入磁盘时,它们会减少。当磁盘数据在内存中可用时(通过从磁盘读取数据或将缓冲区转换为缓存),缓存会增加;当内存压力意味着保留它不再有用时,它就会减少。两者都存在于内存中,因此它们的大小会影响可用内存量;但两者都可以回收,因此它们的大小不会影响可用内存量。

相关内容