美文网首页linux
【Linux】Out of memory: Kill proce

【Linux】Out of memory: Kill proce

作者: Bogon | 来源:发表于2024-09-08 16:24 被阅读0次
    #  cat   /var/log/messages
     
    Out of memory: Kill process 22667(mongod)  score 238 or sacrifice child
    

    “内存不足:终止进程 22667(mongod),得分 238 或牺牲子进程。”

    这个消息表示系统内存不足,Linux 内核选择终止一个进程以释放内存。

    这条日志表明系统的内存资源已经耗尽,内核使用 OOM (Out Of Memory) 处理机制来决定终止一个进程以回收内存。
    在你的例子中,进程 mongod(MongoDB 的守护进程)被终止,因为它的“得分”较高,意味着它在资源使用上的影响较大。
    你可以检查系统日志(如 /var/log/syslog/var/log/messages),以获得更多关于内存使用情况和具体事件的详细信息。这通常包括内存消耗大的进程、触发 OOM 的时间点以及内核的决策过程。

    在这个上下文中,“score 238” 是一个内存管理的打分机制,内核使用这个分数来决定哪个进程应该被终止。
    得分越高,表示该进程在内存消耗方面的影响越大。
    这个分数是根据多个因素计算的,如进程的内存使用量、运行时间、对系统的影响等。内核通过比较各个进程的分数来决定哪个进程优先被终止,以尽量减小系统的整体负担。

    如何禁止进程被 OOM 杀掉 ?

    有时候,我们不希望某些进程被 OOM killer 杀掉。
    例如 MySQL 进程如果被 OOM killer 杀掉的话,那么可能导致数据丢失的情况。

    那么如何防止进程被 OOM killer 杀掉呢?
    从上面的分析可知,在内核计算进程最坏分数值时,会加上进程的 oom_score_adj(OOM建议值)值。
    如果将此值设置为 -1000 时,那么系统将会禁止 OOM killer 杀死此进程。

    例如使用如下命令,将会禁止杀死 pid为 2000 的进程:

    #  echo  -1000  >   /proc/2000/oom_score_adj
    

    这样,我们就能防止一些重要的进程被 OOM killer 杀掉了!

    /proc/{pid}/oom_score_adj 是一个文件,用于调整进程在内存不足时被终止的优先级。
    {pid} 是进程的 ID。这个文件中的值范围从 -1000 到 1000,影响 OOM(Out Of Memory)处理机制中的进程得分:

    • -1000:几乎不会被终止,优先级最低。
    • 0:默认值,正常优先级。
    • 1000:最有可能被终止,优先级最高。

    值越高,进程在内存不足时被终止的可能性越大。调整这个值可以帮助你控制在内存紧张时哪些进程更容易被杀死。

    参考

    如何理解Linux中的OOM(Out Of Memory Killer)机制?
    https://www.jianshu.com/p/3049179568ac

    相关文章

      网友评论

        本文标题:【Linux】Out of memory: Kill proce

        本文链接:https://www.haomeiwen.com/subject/irceljtx.html