使用“echo 3 > /proc/sys/vm/drop_caches”的 linux drop_cache 未按预期工作

使用“echo 3 > /proc/sys/vm/drop_caches”的 linux drop_cache 未按预期工作

在我们的生产环境中,我们运行 drop cache 命令echo 3 > /proc/sys/vm/drop_caches来释放 RAM。但我发现删除缓存并不是一个好的做法,而且它也没有多大帮助,因为当一个进程需要更多内存并且如果那么多内存不可用时,操作系统将清除缓存并相应地分配内存。

还有技术价值可用的运行命令之前和之后的内存drop_caches应该相同。

但当我进行一些测试时发现,删除缓存确实帮助我获得了一些空闲 RAM

free -h-删除缓存之前

              total        used        free      shared  buff/cache   available
Mem:           7.6G        4.2G        524M        306M        2.9G        2.8G
Swap:          4.0G        439M        3.6G

free-h-删除缓存后

              total        used        free      shared  buff/cache   available
Mem:           7.6G        3.3G        3.8G        306M        452M        3.8G
Swap:          4.0G        439M        3.6G

正如我们所看到的可用的内存增加了1GB,更有趣的是用过的内存几乎减少了1GB。这是我非常困惑的地方,drop_cache命令不应该只清除吗cached memory?为什么它甚至清除某些正在运行的进程使用的内存(即用过的记忆)

有人可以解释一下吗

  1. 命令如何echo 3 > /proc/sys/vm/drop_caches工作?
  2. free命令中如何计算可用内存(可用内存细分)


编辑后

我的一个问题仍未得到解答

从技术上讲,运行 drop_caches 命令之前和之后的可用内存值应该相同

正如我们所讨论的,可用的内存包括可回收的slab对象

是的,由于可回收的slab对象不包含在空闲、缓冲区或缓存中,这意味着它最终会被使用。 “可用”的定义明确包含它,因此它也包含在那里。

但是当我运行时echo 2 > /proc/sys/vm/drop_caches- 释放可回收的平板对象(包括目录和索引节点)

删除缓存之前

              total        used        free      shared  buff/cache   available
Mem:           7.6G        4.2G        397M        331M        3.0G        2.7G
Swap:          4.0G        429M        3.6G

删除缓存后

              total        used        free      shared  buff/cache   available
Mem:           7.6G        3.3G        3.8G        331M        483M        3.8G
Swap:          4.0G        429M        3.6G

正如我们在这里看到的可用的删除缓存后内存增加了,但由于我已经使用了echo 2,所以它只是空闲的reclaimable slab objects。作为可用的内存始终包含reclaimable slab objects运行时echo 2 > /proc/sys/vm/drop_caches不应更改的值可用的记忆。

但就我而言,情况并非如此。

相关内容