我正在使用的功能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
的输出:当一个进程写入大量数据时,该数据在写入磁盘之前先进入缓冲区。这些缓冲区会占用内存空间,因此未使用的内存量会减少。但是可以使该内存可用,因此可用内存量不会减少。
当您删除文件时,缓冲区不再需要并被回收(甚至将它们保留为缓存也没有意义)。
进程写入数据时缓冲区增加;当数据写入磁盘时,它们会减少。当磁盘上的数据在内存中可用时缓存增加(通过从磁盘读取数据,或将缓冲区转换为缓存);当内存压力意味着保留它不再有用时,它会减少。两者都存在于内存中,因此它们的大小会影响可用内存的数量;但两者都可以回收,因此它们的大小不会影响可用内存的数量。