Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尽管内存可用,但仍会触发OOM Killer_C_Linux_Memory Management_Out Of Memory - Fatal编程技术网

C 尽管内存可用,但仍会触发OOM Killer

C 尽管内存可用,但仍会触发OOM Killer,c,linux,memory-management,out-of-memory,C,Linux,Memory Management,Out Of Memory,我遇到了一个问题,OOM杀手有时会被触发。我在互联网上进行了研究,发现了许多相关的线索。但有几件事仍然困扰着我。我希望有人能帮助我 环境:iMX6(32位)。 用户/内核空间拆分:2G-2G TotalRAm-4GB 一些重要日志: 顶级杀手:gfp\u掩码=0x201da,顺序=0,oom\u得分调整=0 我看到它试图在HIGHMEM区域(从gfp_掩码)分配1页(传染性)内存(顺序=0)。如果我错了,请纠正我 DMA空闲:1322780kB最小:4492kB低:5612kB高:6736kB活

我遇到了一个问题,OOM杀手有时会被触发。我在互联网上进行了研究,发现了许多相关的线索。但有几件事仍然困扰着我。我希望有人能帮助我

环境:iMX6(32位)。 用户/内核空间拆分:2G-2G
TotalRAm-4GB

一些重要日志:

顶级杀手:gfp\u掩码=0x201da,顺序=0,oom\u得分调整=0
我看到它试图在HIGHMEM区域(从gfp_掩码)分配1页(传染性)内存(顺序=0)。如果我错了,请纠正我

DMA空闲:1322780kB最小:4492kB低:5612kB高:6736kB活动\u anon:0kB非活动\u anon:0kB活动\u文件:84kB
DMA:941*4kB(UEMC)1211*8kB(UEMC)1185*16kB(UEMC)836*32kB(UEMC)554*64kB
(UEMC)295*128kB(UEMC)106*256kB
高内存可用空间:480kB最小值:512kB低:2384kB高:4256kB活动空间:2021148kB非活动空间:70364kB活动空间文件:0kB
HighMem:0*4kB 1*8kB(R)0*16kB 7*32kB(R)0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB 0*8192kB

我相信OOM杀手是在自由内存(480KB)低于最小值(512KB)时触发的。如果我错了,请再次纠正我

我的问题:
1.我认为DMA_区只有16MB左右,正常_区从16MB向上 约896MB,其余为HIGHMEM_区。但是日志显示超过1GB DMA_区域中存在可用页面(1322780kB)。
2.为什么内核不利用这个区域进行进一步的分配

更多日志:(从完整日志中取出):
每个cpu的DMA:
CPU 0:hi:186,btch:31美元:0
CPU 1:hi:186,btch:31美元:0
CPU 2:hi:186,btch:31美元:0
CPU 3:hi:186,btch:31美元:0
每个cpu的高内存:
CPU 0:hi:186,btch:31美元:51
CPU 1:hi:186,btch:31美元:20
CPU 2:hi:186,btch:31美元:4
CPU 3:hi:186,btch:31美元:14
活动名称:505287非活动名称:17591隔离名称:0
活动\u文件:21非活动\u文件:0孤立\u文件:0
无法战胜:0脏:0写回:0不稳定:0
免费:330815板坯可回收:1134板坯不可回收:3487
映射:15956 shmem:25014页表格:1982反弹:0
25046页缓存页总数
983039页RAM
331349个免费页面
9947保留页
2772页板页
543663页共享
0页交换缓存

cat/proc/pagetypeinfo
页面块顺序:13
每块页数:8192

按顺序0 1 2 3 4 5 6 7 8 9 10 11 12 13的每种迁移类型的可用页面数
节点0,区域DMA,类型不可移动1 0 9 8 3 1 0 1 1 1 0 节点0,区域DMA,类型可回收4 5 1 2 0 1 1 0 1 0 节点0,区域DMA,可移动类型1 6 4 0 0 0 1 2 4 3 3 4 28
节点0,区域DMA,类型保留0 0 0 0 1
节点0,区域DMA,类型CMA 1 1 2 0 0 0 0 1 0 1 3
节点0,区域DMA,输入隔离0 0 0
节点0,区域HighMem,类型不可移动11 7 2 9 6 5 3 3 1 0 1 0
节点0,区域高内存,类型可回收0
节点0,区域HighMem,类型可移动23 201 4771 4084 1803 403 105 69 57 38 23 21 8 23
节点0,区域高内存,类型保留0 0 0 1
节点0,区域HighMem,类型CMA 0
节点0,区域HighMem,输入隔离0 0 0 0 0 0 0 0

块数类型不可移动可回收可移动保留CMA隔离
节点0,区域DMA 5 1 33 1 16 0
节点0,区域高内存2 0 62 1 0 0

如有必要,我很乐意发布更多日志

谢谢你,

Srik

可能不太可能,但您是否尝试添加

vm.overcommit_memory = 2
vm.overcommit_ratio = 80


/etc/sysctl.conf

可能不太可能,但您是否尝试添加

vm.overcommit_memory = 2
vm.overcommit_ratio = 80


/etc/sysctl.conf

错误地将一些代码放在注释中不确定答案是否正确,但将其放在下面的答案中是否有其他建议?错误地将一些代码放在注释中不确定答案是否正确,但将其放在下面的答案中是否有其他建议?这应该会阻止应用程序请求比可用内存更多的内存,但我可以太离谱了,多年来内核中通常不需要太多东西……谢谢你的回复。当前的Overmit_内存是默认的0。我不确定这是否有帮助。即使有帮助,应用程序也无法获得所需的内存。我的问题是DMA_区域似乎有大约1.3GB的空闲内存,为什么内核不使用这些内存分配给用户空间?不是Linux内核专家。。。但是,即使只有部分内存受到保护,它也可能不允许应用程序访问更多的内存。高优先级内核级调用可能需要与用户级别相同的内存