Linux kernel Linux不起作用

Linux kernel Linux不起作用,linux-kernel,kernel,embedded-linux,Linux Kernel,Kernel,Embedded Linux,我想测试一下内核在我的嵌入式Linux上是否可以正常工作。我使用应用程序测试来填充所有内存,并查看如果系统在内存不足的情况下运行,OOM是否会终止我的应用程序 我使用的测试程序: #include <stdio.h> #include <stdlib.h> #define MEGABYTE 1024*1024 int main(int argc, char *argv[]) { void *myblock = NULL; int cou

我想测试一下内核在我的嵌入式Linux上是否可以正常工作。我使用应用程序测试来填充所有内存,并查看如果系统在内存不足的情况下运行,OOM是否会终止我的应用程序

我使用的测试程序:

#include <stdio.h>
#include <stdlib.h>

#define MEGABYTE 1024*1024

int main(int argc, char *argv[])
{
        void *myblock = NULL;
        int count = 0;

        while(1)
        {
                myblock = (void *) malloc(MEGABYTE);
                if (!myblock) break;
                memset(myblock,1, MEGABYTE);
                printf("Currently allocating %d MB\n",++count);

        }
        exit(0);

}
我试图通过添加以下内容来更改/etc/sysctl:

vm.oom_kill_allocating_task=1
vm.panic_on_oom=0
vm.overcommit_memory=0
how can I make OOM works fine on my system 

内核版本:2.6.30#7 SMP PREEMPT

Linux“OOM杀手”是解决此问题的解决方案

如果你只是“填满所有的内存”,那么过度使用就不会出现。
malloc
调用最终将返回一个空指针,这是一种表示无法满足内存请求的约定

为了引起与过度使用相关的问题,您必须分配太多内存,而不向其写入,然后决定向其全部写入,这样系统就会发现自己被迫履行其所做的承诺,而没有能力履行这些承诺

提供源代码后编辑:


准确地说,为了触发过度提交问题并迫使Linux OOM killer采取行动,您应该有几个进程,在第一阶段中,所有进程都使用
malloc()
(但不要写入)保留内存。然后让所有人同时写入他们保留的内存。这将迫使Linux在任何内存分配之外遵守内存承诺,并且它将别无选择,只能杀死一个没有分配的进程(因为此时没有一个进程会分配内存)。

另外,如果您仍然想了解OOM killer的工作方式或工作时间的话。我建议您在while循环之前添加fork()。这将创建许多进程,最终其中一个进程将被杀死。

很抱歉,我复制了答案区域中的代码,请查看它?@Issam.Chorfa我看到了。我在问题中复制了您的代码(我建议您删除发布的答案;您可以随时编辑问题以添加信息)。我还编辑了我的回答,添加了关于您提供的新信息的建议。
vm.oom_kill_allocating_task=1
vm.panic_on_oom=0
vm.overcommit_memory=0
how can I make OOM works fine on my system