为什么overcommit_memory设置为2仍然可能发生oom?

为什么overcommit_memory设置为2仍然可能发生oom?

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,我的猜测正确吗?

相关内容