vm.overcommit_ratio 的剩余内存去哪儿了?

Dan*_*kin 10 linux kernel memory out-of-memory

如果我通过设置vm.overcommit_memory为禁用内存过量使用2,默认情况下系统将允许分配内存最多为交换维度 + 50% 的物理内存,如解释here

我可以通过修改vm.overcommit_ratio参数来改变比例。假设我将其设置为 80%,因此可能会使用 80% 的物理内存。

我的问题是:

  • 系统将如何处理剩余的 20%?
  • 为什么首先需要这个参数?
  • 为什么我不应该总是将其设置为 100%?

jll*_*gre 6

系统将如何处理剩余的 20%?

内核将使用剩余的物理内存用于其自身目的(内部结构、表、缓冲区、缓存等)。内存过载设置处理用户态应用程序虚拟内存预留,内核不使用虚拟内存而是物理内存。

为什么首先需要这个参数?

overcommit_ratio参数是一种实现选择,旨在防止应用程序保留比将来合理可用的虚拟内存更多的虚拟内存,即当它们实际访问内存(或至少尝试访问)时。

设置overcommit_ratio为 50% 已被 Linux 内核开发人员视为合理的默认值。它假设内核永远不需要使用超过 50% 的物理 RAM。您的里程可能会有所不同,这就是为什么它是可调的。

为什么我不应该总是将其设置为 100%?

将其设置为 100%(或任何“太高”的值)并不能可靠地禁用过度使用,因为您不能假设内核将使用 0%(或太少)的 RAM。

它不会阻止应用程序崩溃,因为内核可能会抢占它需要的所有物理内存。