我一直在研究 Linux 中的内存过量提交/proc/sys/vm/overcommit_memory
,并且我读过一些文章,但它们并没有谈论同样的事情。
本文档在“走错了方向”标题下,继续说,“值 1:过度使用,0(默认值):不使用”,但在接下来的几行中,它提到,除其他类似内容外,这实际上并不正确,0 表示“猜测多少过度使用是合理的”。这意味着内存过度使用不是使用值 0 禁用,对吗?
它还表示 1 表示“永不拒绝任何 malloc()”,2 表示“精确过度提交 - 永远不会提交大于交换空间加上物理内存的分数 overcommit_ratio 的虚拟地址空间。”
红帽杂志另一方面,指出“如果值为 0,则内核将检查是否有足够的内存来授予应用程序对 malloc 调用的内存请求。如果有足够的内存,则授予请求。否则,将拒绝该请求并向应用程序返回错误代码。”这听起来就像禁用过度承诺一样。
“如果将值设置为 1,则内核将授予超过系统中物理 RAM 和交换空间数量的分配,如 overcommit_ratio 值所定义的那样……如果此文件中的设置为 2,则内核将允许所有内存分配,而不管当前内存分配状态如何。” 就值 1 和 2 而言,这与之前的文档所说的相反,对吗?
有谁知道什么才是真正正确的,以及是否有可能“禁用”过度承诺?
答案1
Red Hat 杂志将 1 和 2 颠倒过来。请注意可能会阻止禁用过度承诺的错误,如下所示:https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/345601