我的ubuntu无法杀掉占用内存过多的进程?

我的ubuntu无法杀掉占用内存过多的进程?

当我测试它时,我的计算机尽力为我的程序提供最多的内存。然后我的计算机崩溃了。但我记得如果它持续需要太多内存,ubuntu 会终止这个过程。为什么会变成这样?

/*I write the code to test how much memory can my computer provide the most*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int m = 0 ;
    while( malloc(1 << 20) )
    {
        printf ("%d MB\n", ++m) ;
    }
    return 0 ;
}

答案1

由于内存并未分配,而只是保留,因此这将填满系统的其他部分,如页表,但不会填满物理内存。内存不足杀手处理。在泄漏内存块之前,请尝试对其使用 memset()。

您可能还想了解 /proc/sys/vm/overcommit_memory

从:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

过度使用内存:

该值包含一个启用内存过量使用功能的标志。

当此标志为 0 时,内核会尝试估计用户空间请求更多内存时剩余的可用内存量。

当此标志为 1 时,内核假装总是有足够的内存,直到真正用完为止。

当此标志为 2 时,内核使用“永不过度使用”策略,试图防止任何内存过度使用。请注意,user_reserve_kbytes 会影响此策略。

这个特性非常有用,因为有很多程序“以防万一”会 malloc() 分配大量内存,但实际上并没有使用太多。

默认值为 0。

相关内容