如果我通过将vm.overcommit_memory设置为2来禁用内存过度提交,默认情况下,系统将允许将内存分配到交换空间+物理内存的50%的维度,正如解释的这里。
我可以通过修改vm.overcommit_ratio参数来改变比率。假设我将其设置为80%,这样就可以使用80%的物理内存。
我的问题是:
发布于 2016-07-08 12:36:14
至于余下的20%,这个制度又会怎样呢?
内核将将剩余的物理内存用于自己的目的(内部结构、表、缓冲区、缓存等)。内存过度承诺设置处理用户应用程序虚拟内存预留,内核不使用虚拟内存,而是使用物理内存。
为什么首先需要这个参数?
overcommit_ratio参数是一种实现选择,旨在防止应用程序保留比未来合理可用的虚拟内存更多的虚拟内存,即当它们实际访问内存(或至少尝试访问)时。
Linux内核开发人员认为将overcommit_ratio设置为50%是一个合理的默认值。它假设内核永远不需要使用超过50%的物理RAM。你的里程可能会不同,原因是它是可调的。
为什么我不应该总是把它设定为100%呢?
将其设置为100% (或任何“过高”值)并不能可靠地禁用过度承诺,因为您不能假设内核将使用0% (或太少)的RAM。
它不会阻止应用程序崩溃,因为内核可能会抢占它所需要的所有物理内存。
发布于 2016-07-09 17:30:40
将比率设置为100%不会为文件支持的页面保留任何空间,也不会为内核内的分配(如内核代码、网络缓冲区等)预留任何空间。
内核中的结构将不管如何分配,都会导致过度提交.它们通常是单独的(例如,有网络缓冲区的设置)。我不认为有一个50%的总体限制,虽然总体限制是一些工作,目的是托管容器。
文件支持的页面是您通常运行用户空间代码的地方,所以您也需要空间。
https://unix.stackexchange.com/questions/294180
复制相似问题