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并查看是否有任何进程需要更多可用的物理内存.
归档时间: |
|
查看次数: |
15290 次 |
最近记录: |