尽管有空闲记忆,但仍会触发OOM杀手

时间:2017-04-27 15:45:07

标签: c linux memory-management out-of-memory

我遇到了OOM杀手被触发的问题。我在互联网上进行了研究,发现了很多相关的主题。但有些事情仍困扰着我。我希望有人可以帮助我。

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

一些重要的日志:

顶部调用oom-killer:gfp_mask = 0x201da,order = 0,oom_score_adj = 0
我看到它试图在HIGHMEM区域(来自gfp_mask)分配1页(传染性)内存(order = 0)。如果我错了,请纠正我。

无DMA:1322780kB分钟:4492kB低:5612kB高:6736kB active_anon:0kB inactive_anon:0kB active_file:84kB
DMA:941 * 4kB(UEMC)1211 * 8kB(UEMC)1185 * 16kB(UEMC)836 * 32kB(UEMC)554 * 64kB
(UEMC)295 * 128kB(UEMC)106 * 256kB
HighMem free:480kB min:512kB low:2384kB high:4256kB active_anon:2021148kB inactive_anon:70364kB active_file: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杀手是因为免费Highmem(480KB)低于最小值(512KB)而被触发。如果我错了,请再次纠正我。

我的问题:
1.我认为DMA_ZONE只有大约16MB,NORMAL_ZONE从16MB开始向上    大约896MB,其余的是HIGHMEM_ZONE。但是日志显示超过1GB    DMA_ZONE中存在空闲页面(1322780kB) 2.为什么内核不利用此区域进行进一步分配?

更多日志:(从完整的日志中取出):
DMA per-cpu:
 CPU 0:嗨:186,btch:31 usd:0
 CPU 1:嗨:186,btch:31 usd:0
 CPU 2:嗨:186,btch:31 usd:0
 CPU 3:嗨:186,btch:31 usd:0
HighMem per-cpu:
 CPU 0:嗨:186,btch:31 usd:51
 CPU 1:嗨:186,btch:31 usd:20
 CPU 2:嗨:186,btch:31 usd:4
 CPU 3:嗨:186,btch:31 usd:14
active_anon:505287 inactive_anon:17591 isolated_anon:0
active_file:21 inactive_file:0 isolated_file:0
不可控制:0脏:0回写:0不稳定:0
free:330815 slab_reclaimable:1134 slab_unreclaimable:3487
映射:15956 shmem:25014 pagetables:1982 bounce:0
25046页面总页数 内存983039页 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 1 0 1 0 节点0,区域DMA,类型可回收4 5 5 1 2 0 1 1 1 0 1 0 1 0 节点0,区域DMA,类型可移动1 6 4 0 0 0 1 1 2 4 3 3 4 28
节点0,区域DMA,类型保留0 0 0 0 0 0 0 0 0 0 0 0 0 1
节点0,区域DMA,类型CMA 1 1 2 0 0 0 0 0 1 1 0 0 1 3
节点0,区域DMA,类型隔离0 0 0 0 0 0 0 0 0 0 0 0 0 0
节点0,区域HighMem,类型Unmovable 11 7 2 2 9 6 5 3 3 1 0 1 1 0
节点0,区域HighMem,类型可回收0 0 0 0 0 0 0 0 0 0 0 0 0 0
节点0,区域HighMem,类型Movable 23 201 4771 4084 1803 403 105 69 57 38 23 21 8 23
节点0,区域HighMem,类型保留0 0 0 0 0 0 0 0 0 0 0 0 0 1
节点0,区域HighMem,类型CMA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 节点0,区域HighMem,类型Isolate 0 0 0 0 0 0 0 0 0 0 0 0 0 0

块数类型不可移动可回收可移动储备CMA隔离

节点0,区域DMA 5 1 33 1 16 0
节点0,区域HighMem 2 0 62 1 0 0

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

三江源,
斯里克

1 个答案:

答案 0 :(得分:0)

可能是远射,但你试过添加

vm.overcommit_memory = 2
vm.overcommit_ratio = 80

/etc/sysctl.conf中