![为什么overcommit_memory设置为2仍然可能发生oom?](https://linux22.com/image/14254/%E4%B8%BA%E4%BB%80%E4%B9%88overcommit_memory%E8%AE%BE%E7%BD%AE%E4%B8%BA2%E4%BB%8D%E7%84%B6%E5%8F%AF%E8%83%BD%E5%8F%91%E7%94%9Foom%EF%BC%9F.png)
2:经常检查,切勿过度投入
在模式 2 中(自 Linux 2.6 起可用),可分配的总虚拟地址空间(/proc/meminfo 中的 CommitLimit)计算如下
CommitLimit = (total_RAM - total_huge_TLB) *
overcommit_ratio / 100 + total_swap
IIUC,echo 2 > /proc/sys/vm/overcommit_memory
禁用过度使用,因此它不应该允许分配比实际物理内存(ram + swap)更多的虚拟内存。但是当玩模糊测试三位一体时,它仍然报告内存不足并杀死我的桌面环境。
我猜想的一个可能的原因是always check, never overcommit
每个进程分配的内存永远不会超过CommitLimit
,但是仍然存在多个进程同时分配内存并且总和超过 的倾向CommitLimit
,我的猜测正确吗?