众所周知,借助虚拟内存这一伟大机制,Linux内核允许进程申请比较大的内存,等以后用到的时候才分配实际的物理内存空间,当启用了swap时,这个可以申请的内存空间甚至可以超过实际的物理内存大小。进程申请异常的大量内存会对操作系统内存管理造成冲击,产生一些让人不怎么愉快的结果,所以Linux内核允许进程申请在某种程度上过量的内存,但需要对进程可以申请的内存上限做出一些限制,这就OverCommit。
OverCommit策略
# cat /proc/sys/vm/overcommit_memory
0
上面这条命令可以查看当前系统采用的OverCommit策略,0代表当前采用的策略,Linux有三种OverCommit机制,每一种数字代表不同的策略:
0:启发式策略,后果比较严重的Overcommit将不能成功,而轻微的Overcommit将被允许。
1:永远允许Overcommit,这种策略适合那些不能承受内存分配失败的应用,比如某些科学计算应用。
2:永远禁止Overcommit,在这个情况下,系统所能分配的内存不会超过swap+RAM*系数(/proc/sys/vm /overcmmit_ratio,默认50%,你可以调整),如果这么多资源已经用光,那么后面任何尝试申请内存的行为都会返回错误,这通常意味着此时 没法运行任何新程序。