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

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

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

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

我的问题是:

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

答案1

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

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

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

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

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

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

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

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

答案2

将比率设置为 100% 不会为文件支持页面或内核分配(例如内核代码、网络缓冲区等)保留任何空间。

不管怎样,内核结构都会被分配,从而导致过度使用。它们通常受到单独限制(例如,有一个网络缓冲区设置)。我不认为总体限制为 50%,尽管总体限制是为了托管容器而制定的。

文件支持的页面通常是您运行用户空间代码的地方,因此您也需要空间。

相关内容