Memory management Linux内存过度分配详细信息

Memory management Linux内存过度分配详细信息,memory-management,out-of-memory,embedded-linux,low-memory,Memory Management,Out Of Memory,Embedded Linux,Low Memory,我正在为嵌入式Linux开发软件,我正在遭受系统挂起的痛苦,因为OOM杀手不时出现。在继续之前,我想解决一些令人困惑的问题,即假设/proc/sys/vm/overcommit_内存为0,/proc/sys/vm/min_free_kbytes为712,并且没有交换,Linux内核如何分配动态内存 假设嵌入式Linux当前可用的物理内存为5MB(5MB的可用内存,没有可用的缓存或缓冲内存),如果我编写以下代码: 。。。。。 #定义兆字节1024*1024 ..... ..... void*ptr

我正在为嵌入式Linux开发软件,我正在遭受系统挂起的痛苦,因为OOM杀手不时出现。在继续之前,我想解决一些令人困惑的问题,即假设/proc/sys/vm/overcommit_内存为0,/proc/sys/vm/min_free_kbytes为712,并且没有交换,Linux内核如何分配动态内存

假设嵌入式Linux当前可用的物理内存为5MB(5MB的可用内存,没有可用的缓存或缓冲内存),如果我编写以下代码:

。。。。。
#定义兆字节1024*1024
.....
.....
void*ptr=NULL;
ptr=(void*)malloc(6*兆字节)//保存6MB
如果(!prt)
出口(1);
memset(ptr,1兆字节);
.....
我想知道在提交memset调用时,内核是否会尝试在物理内存空间中分配~6MB或~1MB(或最小空闲字节数的倍数)

现在我的嵌入式设备中有大约9MB的内存,它有32MB的RAM。我通过以下方式进行检查

# echo 3 > /proc/sys/vm/drop_caches 
# free
            total         used         free       shared      buffers
Mem:        23732        14184         9548            0          220
Swap:            0            0            0
Total:        23732        14184         9548
忘记了最后一段C代码,我想知道当空闲内存大于6MB时,是否可能出现oom杀手。 我想知道当oom出现时系统是否内存不足,所以我想我有两个选择:

  • 请参阅可疑进程的/proc/pid/status中的VmRSS条目

  • 设置/proc/sys/vm/overmit_memory=2和/proc/sys/vm/overmit_memory=75,查看是否有任何进程需要更多可用物理内存


    • 我想你可以读一下。Is为您提供了三个小型C程序,您可以使用它们来了解不同可能值的
      /proc/sys/vm/overmit_memory

      会发生什么情况。您的问题不明确,因为不清楚“分配”是什么意思。内核将保留6MB,但它不会分配任何东西,因为进程可能永远不会访问内存。但当执行memset(ptr,1兆字节)时,进程正在写入内存,不是吗?是的,然后操作系统必须实际分配一些。但我的问题是,如果它分配~6MB或~1MB?它会保留6MB,然后分配1MB。