首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OOM Killer被触发,尽管有空闲的记忆

OOM Killer被触发,尽管有空闲的记忆
EN

Stack Overflow用户
提问于 2017-04-27 15:45:07
回答 2查看 1.5K关注 0票数 1

我遇到了一个问题,OOM杀手被触发了几次。我在互联网上做过研究,发现了很多相关的线索。但有几件事我还是很困惑。我希望有人能帮我。

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

TotalRAm - 4GB

一些重要的日志:

top调用oom杀手: gfp_mask=0x201da,order=0,oom_score_adj=0

我看到它试图在HIGHMEM区域(从order=0)分配1页(传染性的)内存。如果我错了,请纠正我。

DMA免费:1322780kB最低:4492kB低:5612kB高:6736 DMA active_anon:0kB inactive_anon:0kB active_file:84kB

DMA: 941*4kB (UEMC) 1211*8kB (UEMC) 1185*16 4kB (UEMC) 836*32 4kB (UEMC) 554*64 4kB

(欧电)295*128 106(欧电)106*256 106

HighMem :480 min min:512 min低:2384 min高:4256 min active_anon:2021148kB inactive_anon:70364kB active_file:0kB

HighMem: 0*4kB1*8KB (R) 0*16 4kB 7*32 4kB (R) 0*64 4kB 0*128 4kB 0*256 4kB 0*512 4kB 0*1024 4kB 0*2048 4kB 0*4096 4kB 0*8192 4kB

我相信OOM杀手是被触发的,因为自由海姆(480 as )低于最小值(512 As)。如果我错了,请再次纠正我。

我的问题:

  1. 我以为DMA_ZONE只有16 to,NORMAL_ZONE从16 to上升到大约896 to,其余的是HIGHMEM_ZONE。但是日志显示DMA_ZONE中存在超过1GB的空闲页面(1322780kB)。
  2. 为什么内核不利用这个区域进行进一步的分配?

Morelog:(从完整日志中取出):

DMA /cpu:

CPU 0:嗨: 186,btch: 31美元: 0

CPU 1:嗨: 186,btch: 31美元: 0

CPU 2:嗨: 186,btch: 31美元: 0

CPU 3:嗨: 186,btch: 31美元: 0

每cpu HighMem:

CPU 0:嗨: 186,btch: 31美元: 51

CPU 1:嗨: 186,btch: 31美元: 20

CPU 2:嗨: 186,btch: 31美元: 4

CPU 3:嗨: 186,btch: 31美元: 14

active_anon:505287 inactive_anon:17591 isolated_anon:0

active_file:21 inactive_file:0 isolated_file:0

不可逐出:0脏:0写回:0不稳定:0

免费:330815 slab_reclaimable:1134 slab_unreclaimable:3487

映射:15956 shmem:25014页:1982年弹出: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,类型Unmovable 1 0 9 8 3 1 1 1 0 1 0 Node 0,区域DMA,类型可再生4 5 5 1 0 2 0 1 1 0 1 0 1 0 Node 0,DMA,1 6 4 0 0 1 1 2 4 3 3 4 28

节点0,区域DMA,类型后备0 0 0 1

节点0,DMA区,类型为CMA 1 1 2 0 0 0 1 0 1 0 1 3

节点0,区域DMA,类型隔离0 0 0

节点0,区域HighMem,类型不可移动11 7 2 2 9 6 3 3 1 0 1 0

节点0,区域HighMem,类型可恢复的0 0 0

节点0,区域HighMem,类型可移动23 201 4771 4084 1803 403 105 69 57 38 23 21 8 23

节点0,区域HighMem,类型为备用0 0 0 1

节点0,区域HighMem,类型为CMA 0 0 0

节点0,区域HighMem,类型隔离0 0 0

块数型不可移动可再生备用CMA隔离装置

节点0,区域DMA 5 1 33 1 16 0

节点0,区域HighMem 2 0 62 1 0 0

如有需要,我很乐意张贴更多的日志。

谢谢你,

斯里克

EN

回答 2

Stack Overflow用户

发布于 2017-04-27 15:53:25

可能很长时间了,但你有没有试过

代码语言:javascript
复制
vm.overcommit_memory = 2
vm.overcommit_ratio = 80

/etc/sysctl.conf

票数 0
EN

Stack Overflow用户

发布于 2021-08-22 15:55:45

由于32位内核只能直接访问4GB的虚拟内存,并且硬件访问的可用地址空间受到很大的限制,所以虚拟内存出现了很大的变化。例如,网络适配器硬件加速可能需要某些特定地址范围内的内存,如果在该特定范围内耗尽RAM,系统要么必须运行OOM Killer,要么关闭网络适配器。这是真的,即使你的系统可以在一些不相关的区域免费使用。

有关详细信息,请尝试查看以下链接:

也许这个也是:

TL;DR:如果您需要2GB以上的内存,请安装64位操作系统。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43662350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档