overcommit_memory参数vm.overcommit_memoryvm.overcomit_ratio

    

linux内存分配原理

    linux对大部分申请内存的请求回复都是yes,以便能跑更多更大的程序。

    因为申请内存后,并不会马上使用内存,这种技术叫做overcommit。

    当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。

    它会选择杀死一些进程,以便释放内存。


overcomit-memory参数:

    0:默认设置。

         进程申请内存时,系统会判断剩余内存多少,

         如果有足够的内存,则允许申请,否则会把报错返回给进程。

    1:进程申请内存时,系统允许分配所有物理内存(不考虑当前内存剩余),

         当使用内存超过可用内存时再报错。

    2:进程申请内存时,系统不允许分配大于swap空间大小以及overcommit_ratio比例大小的总和。

         overcommit_ratio比例默认50。

         

overcommit_ratio参数:

    当overcommit_memory=2时,该参数才生效。该参数决定了系统可用内存的大小。

    它有一套专门的计算公式: 可分配大小=物理内存大小*overcommit_ratio/100+swap

    

修改内核参数的方法:(三种都可以)

    方法一:

        # vim /etc/sysctl.conf

           vm.overcommit_memory=1            //有则更改,无则添加

        # sysctl -p           //使配置文件生效

        

    方法二:

        # sysctl vm.overcommit_memory=1

        

    方法三:

        # echo 1 > /proc/sys/vm/overcommit_memory