gpt4 book ai didi

memory-management - Linux 内存过量使用详情

转载 作者:行者123 更新时间:2023-12-04 07:46:21 24 4
gpt4 key购买 nike

我正在为嵌入式 Linux 开发软件,我正在遭受系统挂起,因为 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);
.....

我想知道当 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

忘记最后一段 C 代码,我想知道当空闲内存大约大于 6MB 时是否可能出现 oom 杀手。
我想知道当oom出现时系统是否内存不足,所以我想我有两个选择:
  • 查看可疑进程的/proc/pid/status 中的 VmRSS 条目。
  • 设置/proc/sys/vm/overcommit_memory = 2 和/proc/sys/vm/overcommit_memory = 75 看看是否有任何进程需要更多可用的物理内存。
  • 最佳答案

    我想你可以读这个document . Is 为您提供了三个小型 C 程序,您可以使用它们来了解 /proc/sys/vm/overcommit_memory 的不同可能值会发生什么情况。 .

    关于memory-management - Linux 内存过量使用详情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19148296/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com