常见OOM问题之Kill process or sacrifice child详解

本文来自于HeapDump性能社区! !有性能问题,上HeapDump性能社区!

正文:

为了理解这个错误,我们需要回顾一下操作系统的基础知识。如您所知,操作系统是建立在进程的概念之上的。这些进程由几个内核作业引导,在这种特殊情况下,我们对其中一个名为“OOM Killer”的作业很感兴趣。


v2-f3a61ebe494dbc90046b834ea784d211_1440w.png

此内核作业可以在极低的内存条件下消灭您的进程。当检测到这种情况时,内存不足杀手会被激活并选择一个进程来杀死。使用一组启发式对所有进程进行评分并选择得分最差的进程来选择目标。因此,OOM:Kill process or sacrifice child与我们的OOM 手册中涵盖的其他错误不同,因为它不是由 JVM 触发或代理的,而是内置于操作系统内核中的安全网。

内存不足 linux 内核

输出存储器:Kill process or sacrifice child时可用虚拟内存(包括交换空间)被产生误差被消耗到整个操作系统稳定性被投入风险的程度。在这种情况下,OOM Killer会选择流氓进程并杀死它。

1,是什么原因造成的?

默认情况下,Linux 内核允许进程请求比系统中当前可用的内存更多的内存。考虑到大多数进程实际上从未使用过它们分配的所有内存,这在世界上都是有意义的。与这种方法最简单的比较是宽带运营商。他们向所有消费者出售 100Mbit 下载承诺,远远超过他们网络中的实际带宽。赌注再次取决于用户不会同时全部使用他们分配的下载限制这一事实。因此,一个 10Gbit 链路可以成功地为超过 100 个用户提供我们简单的数学所允许的服务。

如果您的某些程序正在耗尽系统内存,则这种方法的副作用是可见的。这可能导致内存极低的情况,即无法分配任何页面来处理。您可能遇到过这样的情况,即使是 root 帐户也无法杀死有问题的任务。为了防止出现这种情况,杀手会激活并识别流氓进程被杀死。

您可以在这篇来自 RedHat 文档的文章中阅读有关微调“OOM Killer”行为的更多信息。

现在我们有了上下文,你怎么知道是什么触发了“killer”并在凌晨 5 点叫醒你?一种常见的激活触发器隐藏在操作系统配置中。当您检查/proc/sys/vm/overcommit_memory 中的配置时,您会得到第一个提示——此处指定的值表示是否允许所有 malloc() 调用成功。请注意,proc 文件系统中参数的路径因受更改影响的系统而异。

过度使用配置允许为这个流氓进程分配越来越多的内存,这最终会触发“OOM Killer”来做它应该做的事情。

2,举个例子

当您在 Linux 上编译并启动以下 Java 代码片段时(我使用了最新的稳定版 Ubuntu):

package eu.plumbr.demo;

public class OOM {

public static void main(String[] args){
    java.util.List<int[]> l = new java.util.ArrayList();
    for (int i = 10000; i < 100000; i++) {
            try {
                l.add(new int[100_000_000]);
            } catch (Throwable t) {
                t.printStackTrace();
            }
        }
    }
}

那么您将在系统日志(在我们的示例中为/var/log/kern.log)中遇到类似于以下内容的错误:

Jun  4 07:41:59 plumbr kernel: [70667120.897649] Out of memory: Kill process 29957 (java) score 366 or sacrifice child
Jun  4 07:41:59 plumbr kernel: [70667120.897701] Killed process 29957 (java) total-vm:2532680kB, anon-rss:1416508kB, file-rss:0kB

请注意,您可能需要调整交换文件和堆大小,在我们的测试用例中,我们使用了-Xmx2g指定的 2g 堆并具有以下交换配置:

swapoff -a 
dd if=/dev/zero of=swapfile bs=1024 count=655360
mkswap swapfile
swapon swapfile

3,解决办法是什么?

有几种方法可以处理这种情况。解决该问题的第一个也是最直接的方法是将系统迁移到具有更多内存的实例。

其他可能性包括微调 OOM 杀手、跨几个小实例水平扩展负载或减少应用程序的内存需求。

我们不热衷推荐的一种解决方案是增加交换空间。当您回忆起 Java 是一种垃圾收集语言时,此解决方案似乎已经不那么有利可图了。现代 GC 算法在物理内存中运行时是高效的,但在处理交换分配时效率受到打击。交换可以将 GC 暂停的长度增加几个数量级,因此在跳转到此解决方案之前应该三思而后行。

Java OOM系列专题:

第一篇:Java OOM 原理篇 : 什么是 Java OOM

第二篇:Java OOM 基础篇:常见的OutOfMemoryError 场景一:Java heap space 堆溢出问题详解

第三篇:Java OOM 基础篇:常见的OutOfMemoryError 场景二 : GC overhead limit exceeded 问题详解

第四篇:Java OOM 基础篇:常见的OutOfMemoryError 场景三: PermGen space 永久空间问题详解

第五篇:Java OOM 基础篇:常见的OutOfMemoryError 场景四: Permgen size 元空间问题详解

第六篇:Java OOM 实战篇:应用故障之Java heap space 堆溢出实战

第七篇:Java OOM 高级篇:体验了一把线上CPU100%及应用OOM的排查和解决过程

第八篇:Java OOM 高级篇:线上Docker 上Springboot程序OOM问题的排查分享

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容