Linux内存过度使用细节

MAB*_*ABC 4 memory-management out-of-memory low-memory embedded-linux

我正在为嵌入式Linux开发SW,我正在遭受系统挂起,因为OOM Killer不时出现.在超越之前,我想解决有关Linux内核如何分配动态内存的一些令人困惑的问题,假设/ proc/sys/vm/overcommit_memory为0且/ proc/sys/vm/min_free_kbytes为712,并且没有交换.

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

.....
#define MEGABYTE 1024*1024
.....
.....
void *ptr = NULL;
ptr = (void *) malloc(6*MEGABYTE); //Preserving 6MB
if (!prt) 
    exit(1);
memset(ptr, 1, MEGABYTE);
.....
Run Code Online (Sandbox Code Playgroud)

我想知道,当提交memset调用时,内核将尝试在物理内存空间中分配~6MB或~1MB(或min_free_kbytes倍数).

现在我的嵌入式设备大约有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
Run Code Online (Sandbox Code Playgroud)

忘记最后一段C代码,我想知道当可用内存大约> 6MB时是否可能出现oom杀手.我想知道当oom出现时系统是否内存不足,所以我认为我有两个选择:

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

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

Ott*_*ana 8

我想你可以阅读这份文件.是否为您提供了三个小型C程序,您可以使用这些程序来了解不同可能值的变化/proc/sys/vm/overcommit_memory.