内核内存分配与OOM机制详解
1. 内存相关概念及系统配置
在深入探讨内存分配和OOM(Out of Memory)机制之前,我们需要先了解几个重要的概念。 Committed_AS 表示系统当前已分配的内存总量,它是所有进程已分配内存的总和,即便这些内存尚未被进程实际使用。例如,一个进程使用 malloc(3) 分配了 1GB 内存,但只使用了其中的 300MB,系统仍会将这 1GB 计入 Committed_AS 。
系统的内存过度提交(overcommit)配置对内存分配有着重要影响,该配置可通过 /proc/sys/vm/overcommit_memory 进行调整,主要有以下几种模式:
- 模式 0(默认,OVERCOMMIT_GUESS) :这是默认的 VM 过度提交设置。在此模式下, vm.overcommit_ratio 和 vm.overcommit_kbytes 不起作用,系统采用启发式方法来决定允许的过度提交内存量。进程可以消耗大量虚拟内存,直到出现以下两种情况之一:
- 耗尽虚拟地址空间(VAS),在 32 位系统中这种情况较为常见,但在 64 位系统中由于 VAS 非常大,这种可能性较小。
- 耗尽所有内存,包括 CPU 缓存、RAM 和交换空间。当内存压力过大,即使系统尝试回收内存帧也无法满足需求时,内核会调用 OOM 杀手。
- 模式 2(OVERCOMMIT_NEVER) :V
超级会员免费看
订阅专栏 解锁全文
2120

被折叠的 条评论
为什么被折叠?



