同事在 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,全称为Out of Memory Killer,是Linux内核中的一种机制,用于处理系统内存不足的情况。当系统内存耗尽时,为了避免整个系统的崩溃,OOM Killer会选择并终止一些进程来释放内存,从而确保系统的稳定运行...
Linux系统的OOM(Out of Memory)Killer处理机制是一种内核机制,用于在系统内存不足时杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。OOM Killer的触发条件是系统内存不足,具体来说是当系统的物理内存...
8. OOM(Out-Of-Memory)杀手:当系统内存耗尽时,Linux会启动OOM killer,选择杀死一些进程以释放内存。选择哪个进程被杀取决于其内存使用情况和优先级。 9. 内存管理工具:`free`命令显示当前系统的内存使用情况...
MySQL Slave 触发oom-killer的情况通常是因为MySQL进程消耗了过多的内存,导致操作系统认为它引发了内存不足(Out Of Memory)的问题。在这种情况下,Linux内核会启动oom-killer机制来杀死消耗内存最多的进程,以...
1 概述 Android的设计理念之一,便是应用程序退出,但进程还会继续存在系统以便...Android基于Linux的系统,其实Linux有类似的内存管理策略——OOM killer,全称(Out Of Memory Killer), OOM的策略更多的是用于分配内存
当Linux系统面临内存不足的压力时,内核会启动一个称为“Out-of-Memory (OOM) Killer”的机制来防止系统崩溃。然而,OOM Killer可能会选择终止重要的进程,包括Erlang应用程序。针对这种情况,有一个名为“heart_oom...
在Linux系统中,当内存资源紧张,即将耗尽时,为避免系统崩溃,Linux内核引入了一种称为OOM (Out Of Memory) Killer的机制。OOM Killer会选择性地杀死某些进程以回收内存。这一机制主要针对系统可用内存(包括Swap...
虚拟内存管理还包括内存泄漏检测、oom killer(Out-Of-Memory杀手)等功能。内存泄漏检测可以帮助开发者找出程序中未释放的内存,防止系统资源耗尽。oom killer在系统面临内存耗尽时,会选择杀死一些低优先级的进程...
LowMemoryKiller(低内存杀手)是Android内核中一种独特的内存管理机制,它在标准Linux内核的Out-of-Memory(OOM)机制基础上进行了改良,专门设计用于应对Android设备在运行过程中可能遇到的内存紧张情况。...
Linux操作系统的OOM (Out-Of-Memory) Killer是一个重要的内存管理机制,用于处理系统内存不足的情况。当系统资源极度紧张,无法分配新的内存时,OOM Killer会选择并终止一个或多个进程,以释放足够的内存资源,防止...
8. **内存压力和OOM killer**:当系统面临严重内存压力时,Linux会启动Out-Of-Memory (OOM) killer,选择并终止某些进程以释放内存,防止系统崩溃。 9. **物理内存的预留和保留**:内核为关键系统组件预留一部分...
相比传统的Linux内核中的Out-of-Memory Killer(简称OOM Killer),LMK提供了一种更加灵活的方式来处理低内存状况。它不仅考虑了进程占用的物理内存数量,还引入了一个名为`oom_adj`的指标来决定哪些进程应该被优先...
8. 内存交换(OOM Killer):如果系统内存极度不足,Linux会触发Out-Of-Memory(OOM)机制,选择一些进程进行杀掉,以防止系统崩溃。 9. slab分配器:Linux内核采用slab分配器来管理内核对象的内存,它预分配内存并...
8. **内存压力与OOM Killer**:当系统面临内存压力时,Linux内核会触发Out-of-Memory (OOM) killer,选择并终止一些进程以释放内存,防止系统崩溃。 9. **内存故障恢复**:内核还包含错误检测和处理机制,如对内存...
标题“oom.rar_legacy”暗示了我们正在探讨与操作系统内存管理中的“Out of Memory”(OOM) killer相关的遗留问题。在Linux系统中,当系统内存不足时,OOM killer会被触发,它会选择并终止某些进程以回收内存,从而...
9. **OOM Killer**:当系统面临内存耗尽的危险时,Linux的Out-of-Memory (OOM) Killer会选择一个进程并结束它,以防止整个系统的崩溃。这个机制虽然残酷,但却是最后的防线。 10. **内存的透明大页(Transparent ...
Android 的内存管理机制是基于标准 Linux 内核的 Out of Memory (OOM) 机制修改而来的,称为 Low Memory Killer。Low Memory Killer 是一种改进的内存管理机制,它可以在系统内存不足时,杀死 Bad 进程释放其内存,...
在安卓系统中,"OOM"(Out of Memory)是指应用程序因为消耗了过多的内存而被系统强制终止,这是安卓开发者需要特别关注的问题。本篇将深入探讨安卓内存OOM的分析和解决策略,以及如何通过内核剖析来预防和处理此类...