vm.overcommit_ratio的剩余内存在哪里?


10

如果我通过设置禁用内存过量使用vm.overcommit_memory2,默认情况下,系统允许分配内存高达交换的物理内存+ 50%的尺寸,如解释在这里

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

我的问题是:

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

Answers:


6

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

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

为什么首先需要此参数?

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

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

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

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

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


如果内核仍然可以占用其所需的所有内存,那么公开(甚至创建)此参数有什么意义?
Dan Tumaykin '16

是否有任何官方文件详细说明了这些参数?除了kernel.org/doc/Documentation/vm/overcommit-accounting之外,这里对内核内存的任何引用都丢失了。
Dan Tumaykin '16

1
我还没有找到足够详尽的文档来解释“总地址空间提交”时要精确考虑的内容。您提供的指向文档的链接表明“在大多数情况下,该进程不会被杀死...”这一事实足以确认某些内存可以在其他地方使用,并且该内存的明显使用者是内核。
jlliagre

2

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

内核结构将被分配,而导致过量使用。它们通常受到单独限制(例如,有网络缓冲区的设置)。我不认为总限制为50%,尽管总限制是出于托管容器的目的而进行的工作。

文件支持页面通常是您在其中运行用户空间代码的位置,因此您也需要空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.