一、Memory Overcommit
1、Memory Overcommit
操作系统承诺给进程的内存大小超过了实际可用的内存。
2、Memory overcommit的关键
- commit针对的是内存申请,内存申请不等于内存分配,内存只在实际用到的时候才分配,
- 进程实际使用到的内存往往比申请的内存要少。
二、内核参数
1、overcommit_memory
- 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。(free memory + free swap + pagecache的大小 + SLAB中可回收的部分)
- 1:Always overcommit. 允许overcommit,对内存申请来者不拒。
- 2: Don’t overcommit. 禁止overcommit。
2、vm.overcommit_ratio
物理内存的比例,与vm.overcommit_memory=2搭配使用
三、禁止overcommit
当vm.overcommit_memory=2时,系统时怎么判断申请的内存是overcommit的?
# grep -i commit /proc/meminfo CommitLimit: 8215244 kB Committed_AS: 6451100 kB
CommitLimit:申请的内存总数超过CommitLimit的话就算是overcommit
Committed_AS:所有进程已经申请的内存总大小
CommitLimit的数值是通过如下两种方式计算出来的:
1) (Physical RAM * vm.overcommit_ratio / 100) + Swap)
2)直接通过内核参数vm.overcommit_kbytes大小