如果我通过设置禁用内存过量使用vm.overcommit_memory
到2
,默认情况下,系统允许分配内存高达交换的物理内存+ 50%的尺寸,如解释在这里。
我可以通过修改vm.overcommit_ratio
参数来更改比率。假设我将其设置为80%,因此可以使用80%的物理内存。
我的问题是:
- 该系统将如何处理剩余的20%?
- 为什么首先需要此参数?
- 为什么我不总是将其设置为100%?
如果我通过设置禁用内存过量使用vm.overcommit_memory
到2
,默认情况下,系统允许分配内存高达交换的物理内存+ 50%的尺寸,如解释在这里。
我可以通过修改vm.overcommit_ratio
参数来更改比率。假设我将其设置为80%,因此可以使用80%的物理内存。
我的问题是:
Answers:
该系统将如何处理剩余的20%?
内核将剩余的物理内存用于其自身的目的(内部结构,表,缓冲区,高速缓存等)。内存过量使用设置可处理用户态应用程序的虚拟内存预留,内核不使用虚拟内存,而是使用物理内存。
为什么首先需要此参数?
该overcommit_ratio
参数是一种实现选择,旨在防止应用程序保留比将来合理使用的虚拟内存更多的虚拟内存,即当它们实际访问内存(或至少尝试访问)时。
设置overcommit_ratio
为50%被Linux内核开发人员认为是合理的默认值。假设内核将永远不需要使用超过50%的物理RAM。您的里程可能会有所不同,这是可调参数的原因。
为什么我不总是将其设置为100%?
将其设置为100%(或任何“太高”的值)不能可靠地禁用过量使用,因为您不能假定内核将使用0%(或太少)的RAM。
它不会阻止应用程序崩溃,因为内核可能会抢占它所需的所有物理内存。
将比率设置为100%不会为文件支持的页面或内核内分配(如内核代码,网络缓冲区等)保留任何空间。
内核结构将被分配,而导致过量使用。它们通常受到单独限制(例如,有网络缓冲区的设置)。我不认为总限制为50%,尽管总限制是出于托管容器的目的而进行的工作。
文件支持页面通常是您在其中运行用户空间代码的位置,因此您也需要空间。