我们知道如果用户空间程序保留malloc(),它最终可能会触发OOM杀手。但是内核空间呢?当内核空间内存用完时,会不会触发OOM杀手释放内存?谢谢
发布于 2020-06-15 07:50:10
默认情况下,在Linux上内核分配和用户空间分配之间有一个重要的区别(每当OOM杀手成为一个因素时,这都适用)。内核内存分配函数分配地址空间和物理页,这样当分配函数返回时,调用方知道返回的任何有效指针都是立即可用的。在用户空间中,内存分配分配地址空间,默认情况下只在必要时分配页面(这是OOM杀手发挥作用的时候)。
换句话说,内核内存分配永远不允许超额提交。
内核内存分配可能最终触发OOM杀手,从而释放分配给用户空间的页面。这方面有很多条件,因为这样的分配可能是在无法输入I/O或无法重新输入文件系统的情况下进行的,请参阅全球伙伴关系司旗帜文件获取详细信息。还有其他可用于内核分配的回收机制,用于缓存等;当内核耗尽内存时,它可以刷新这些机制(在某些情况下)以恢复这些机制。
https://unix.stackexchange.com/questions/592953
复制相似问题