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大小
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步