关于arm-linux内核oom-killer的问题

1 篇文章 0 订阅

Linux有一个特性:OOM Killer,一个保护机制,用于避免在内存不足的时候不至于出现严重问题,把一些无关的进程优先杀掉,即在内存严重不足时,系统为了继续运转,内核会挑选一个进程,将其杀掉,以释放内存,缓解内存不足情况,不过这种保护是有限的,不能完全的保护进程的运行。
在很多情况下,经常会看到还有剩余内存时,oom-killer依旧把进程杀死了,现象是在/var/log/messages日志文件中有如下信息:
Out of Memory: Killed process [PID] [process name].
该问题是low memory耗尽,因为内核使用low memory来跟踪所有的内存分配。
当low memory耗尽,不管high memory剩多少,oom-killer都会杀死进程,以保持系统的正常运行。
在32位CPU下寻址范围是有限的,Linux内核定义了下面三个区域:

   # DMA: 0x00000000 -  0x00999999 (0 - 16 MB) 
   # LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB
   # HighMem: 0x038000000 - <硬件特定> 
LowMem区(也叫NORMAL ZONE)共880MB,并且是固定不能变的(除非使用hugemem内核),对于高负荷的系统,可能因为LowMem使用不好而触发了OOM Killer机制。因为内存分配是一个连续的区域,在此时,如果LowMem里存在很多碎片或者LowFree太少,此时无法分配到一块连续的内存区域,就触发了OOM Killer。
查看系统内存使用情况:free -lm

在这里插入图片描述
为了查清楚是哪一个进程引起的oom-killer, 可以在启动脚本中进行如下设置:、

#add for oom-killer
echo 1 > /proc/sys/vm/oom_kill_allocating_task #kill app who malloc first !
echo 1 > /proc/sys/vm/oom_dump_tasks # to produce kernel dump log

#produce kernel dump log
ulimit -c unlimited  #open core, create core dump file, file size unlimited
echo "/opt/core-%e-%p" > /proc/sys/kernel/core_pattern #set core dump file path name
echo 1 > /proc/sys/kernel/core_uses_pid #set core file name with pid
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值