Linux内存-Memory Overcommit

一、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大小

原文地址:https://www.cnblogs.com/guoxianqi2020/p/13926890.html