`

Linux 的 Out-of-Memory (OOM) Killer

阅读更多

同事在 Linux 服务器上遇到点小问题,我也上去折腾半天。这还是第一次注意到 Linux 这个多年来就存在的特性:OOM Killer 。说白了 OOM Killer 就是一层保护机制,用于避免 Linux 在内存不足的时候不至于出太严重的问题,把无关紧要的进程杀掉,有些壮士断腕的意思。

先要学习点老知识,在 32 位CPU 架构下寻址是有限制的。Linux 内核定义了三个区域:

# DMA: 0x00000000 -  0x00999999 (0 - 16 MB) 
# LowMem: 0x01000000 - 0x037999999 (16 - 896 MB) - size: 880MB
# HighMem: 0x038000000 - <硬件特定>

LowMem 区 (也叫 NORMAL ZONE ) 一共 880 MB,而且不能改变(除非用 hugemem 内核)。对于高负载的系统,就可能因为 LowMem 利用不好而引发 OOM Killer 。一个可能原因是 LowFree 太少了,另外一个原因是 LowMem 里都是碎片,请求不到连续的内存区域【根据我遇到的一个案例,一个猜想是 有些应用一次性请求比较大的内存,恰恰又是 880M 之内的,空闲的(LowFree)不够大,就会触发 OOM Killer 出来干活】。检查当前 LowFree 的值:

# cat /proc/meminfo |grep LowFree 

检查LowMem内存碎片:

# cat /proc/buddyinfo

据说使用 SysRq 的方式更好,不过 Hang 的时候再用吧。参见 Metalink Note:228203.1 。

根据一些文档描述,OOM Killer 在 2.4 与 2.6 上表现是不一样的。2.4 的版本中是把新进来(新申请内存)的进程杀掉。而 2.6 上是杀掉占用内存最厉害的进程(这是很危险的,很容易导致系统应用瘫痪)。

对于 RHEL 4 ,新增了一个参数: vm.lower_zone_protection 。这个参数默认的单位为 MB,默认 0 的时候,LowMem 为 16MB。建议设置 vm.lower_zone_protection = 200 甚至更大以避免 LowMem 区域的碎片,是绝对能解决这个问题的(这参数就是解决这个问题出来的)。

而对于 RHEL 3 (Kernel 2.4) 似乎没什么好办法,一个是用 Hugemem 内核(天知道会不会引入新的毛病),一个是升级到 2.4.21-47 并且使用新的核心参数 vm.vm-defragment 控制碎片的数量。再就是使用 RHEL 4 (Kernel 2.6),这又绕回去了。说白了,如果遇到 OOM Killer ,基本上是低版本 Kernel 设计上有点缺陷。

其它,如果去查询 RedHat 的 Bug 库,会发现不少 Kernel 版本也有 Bug 的。尤其在使用 NFS 的场景。

Tip: OOM Killer 的关闭与激活方式:

# echo "0" > /proc/sys/vm/oom-kill 
# echo "1" > /proc/sys/vm/oom-kill

更多参考信息:
?


[点击查看详细]
分享到:
评论

相关推荐

    有关OOM KILLER的一些理解

    OOM Killer,全称为Out of Memory Killer,是Linux内核中的一种机制,用于处理系统内存不足的情况。当系统内存耗尽时,为了避免整个系统的崩溃,OOM Killer会选择并终止一些进程来释放内存,从而确保系统的稳定运行...

    Linux系统的OOM Killer处理机制.docx

    Linux系统的OOM(Out of Memory)Killer处理机制是一种内核机制,用于在系统内存不足时杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。OOM Killer的触发条件是系统内存不足,具体来说是当系统的物理内存...

    linux-memory-manage.rar_Linux 内存管理_linux_memory_内存管理 linux_内存管理

    8. OOM(Out-Of-Memory)杀手:当系统内存耗尽时,Linux会启动OOM killer,选择杀死一些进程以释放内存。选择哪个进程被杀取决于其内存使用情况和优先级。 9. 内存管理工具:`free`命令显示当前系统的内存使用情况...

    MySQL Slave 触发 oom-killer解决方法

    MySQL Slave 触发oom-killer的情况通常是因为MySQL进程消耗了过多的内存,导致操作系统认为它引发了内存不足(Out Of Memory)的问题。在这种情况下,Linux内核会启动oom-killer机制来杀死消耗内存最多的进程,以...

    【性能】OOM原理解析:LowMemoryKiller原理

    1 概述 Android的设计理念之一,便是应用程序退出,但进程还会继续存在系统以便...Android基于Linux的系统,其实Linux有类似的内存管理策略——OOM killer,全称(Out Of Memory Killer), OOM的策略更多的是用于分配内存

    heart_oom_protect:Erlang库可保护心脏免受Linux内核的OOM Killer的杀害

    当Linux系统面临内存不足的压力时,内核会启动一个称为“Out-of-Memory (OOM) Killer”的机制来防止系统崩溃。然而,OOM Killer可能会选择终止重要的进程,包括Erlang应用程序。针对这种情况,有一个名为“heart_oom...

    MySQL OOM 系统二 OOM Killer

    在Linux系统中,当内存资源紧张,即将耗尽时,为避免系统崩溃,Linux内核引入了一种称为OOM (Out Of Memory) Killer的机制。OOM Killer会选择性地杀死某些进程以回收内存。这一机制主要针对系统可用内存(包括Swap...

    Understanding The Linux Virtual Memory Manager.rar

    虚拟内存管理还包括内存泄漏检测、oom killer(Out-Of-Memory杀手)等功能。内存泄漏检测可以帮助开发者找出程序中未释放的内存,防止系统资源耗尽。oom killer在系统面临内存耗尽时,会选择杀死一些低优先级的进程...

    Android内核驱动——内存管理

    LowMemoryKiller(低内存杀手)是Android内核中一种独特的内存管理机制,它在标准Linux内核的Out-of-Memory(OOM)机制基础上进行了改良,专门设计用于应对Android设备在运行过程中可能遇到的内存紧张情况。...

    lab8_oom实验说明1

    Linux操作系统的OOM (Out-Of-Memory) Killer是一个重要的内存管理机制,用于处理系统内存不足的情况。当系统资源极度紧张,无法分配新的内存时,OOM Killer会选择并终止一个或多个进程,以释放足够的内存资源,防止...

    深入理解linux内核中文第三版--第8章

    8. **内存压力和OOM killer**:当系统面临严重内存压力时,Linux会启动Out-Of-Memory (OOM) killer,选择并终止某些进程以释放内存,防止系统崩溃。 9. **物理内存的预留和保留**:内核为关键系统组件预留一部分...

    Android 内核分析报告4

    相比传统的Linux内核中的Out-of-Memory Killer(简称OOM Killer),LMK提供了一种更加灵活的方式来处理低内存状况。它不仅考虑了进程占用的物理内存数量,还引入了一个名为`oom_adj`的指标来决定哪些进程应该被优先...

    linux下内存管理

    8. 内存交换(OOM Killer):如果系统内存极度不足,Linux会触发Out-Of-Memory(OOM)机制,选择一些进程进行杀掉,以防止系统崩溃。 9. slab分配器:Linux内核采用slab分配器来管理内核对象的内存,它预分配内存并...

    深入理解LINUX内核(中文第三版)第八章 内存管理2

    8. **内存压力与OOM Killer**:当系统面临内存压力时,Linux内核会触发Out-of-Memory (OOM) killer,选择并终止一些进程以释放内存,防止系统崩溃。 9. **内存故障恢复**:内核还包含错误检测和处理机制,如对内存...

    oom.rar_legacy

    标题“oom.rar_legacy”暗示了我们正在探讨与操作系统内存管理中的“Out of Memory”(OOM) killer相关的遗留问题。在Linux系统中,当系统内存不足时,OOM killer会被触发,它会选择并终止某些进程以回收内存,从而...

    linux内存管理doc版

    9. **OOM Killer**:当系统面临内存耗尽的危险时,Linux的Out-of-Memory (OOM) Killer会选择一个进程并结束它,以防止整个系统的崩溃。这个机制虽然残酷,但却是最后的防线。 10. **内存的透明大页(Transparent ...

    Android内核驱动——内存管理.pdf

    Android 的内存管理机制是基于标准 Linux 内核的 Out of Memory (OOM) 机制修改而来的,称为 Low Memory Killer。Low Memory Killer 是一种改进的内存管理机制,它可以在系统内存不足时,杀死 Bad 进程释放其内存,...

    安卓内存OOM分析

    在安卓系统中,"OOM"(Out of Memory)是指应用程序因为消耗了过多的内存而被系统强制终止,这是安卓开发者需要特别关注的问题。本篇将深入探讨安卓内存OOM的分析和解决策略,以及如何通过内核剖析来预防和处理此类...

Global site tag (gtag.js) - Google Analytics