在我们的生产环境中,我们运行 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
?为什么它甚至清除某些正在运行的进程使用的内存(即用过的记忆)
有人可以解释一下吗
- 命令如何
echo 3 > /proc/sys/vm/drop_caches
工作? - 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
不应更改的值可用的记忆。
但就我而言,情况并非如此。