zoukankan      html  css  js  c++  java
  • OOM

    一些概念:

        1. Linux下面有个特性叫OOM killer(Out Of Memory killer),这个东西会在系统内存耗尽的情况下跳出来,选择性的干掉一些进程以求释放一些内存。

            典型的情况是:某天机器突然登不上了,能ping通,但是ssh死活连不了。原因是sshd进程被OOM killer干掉了(泪流满面)。

            重启机器后查看系统日志会发现血淋淋的Out of Memory: Killed process ×××、Out of Memory: Killed process 〇〇〇。一篇狼藉,惨不忍睹。

            数据堆积在内存中,内存耗光,逼得OOM killer出来收拾局面。

         2. Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit

             OOM killer与内存overcommit:两者是相互作用的:

             对于一台16G的Linux服务器。如果使用overcommit_memory=0,如果没有没有足够的内存分配,那么应用想分配内存就会失败。如果使用overcommit_memory>0,每次的应用内存申请都会成功,这种成功是建立在OOM killer会杀掉部分进程来实现的。

     

    优先杀死哪些进程?

    1.Linux下每个进程都有个OOM权重,在/proc/<pid>/oom_adj里面,取值是-17到+15,取值越高,越容易被干掉。

    2.最终OOM killer是通过/proc/<pid>/oom_score这个值来决定哪个进程被干掉的。

    这个值是系统综合进程的内存消耗量、CPU时间(utime + stime)、存活时间(uptime - start time)和oom_adj计算出的,消耗内存越多分越高,存活时间越长分越低。

    总之,总的策略是:损失最少的工作,释放最大的内存同时不伤及无辜的用了很大内存的进程,并且杀掉的进程数尽量少。

    好文章:

    https://blog.csdn.net/carlosfu/article/details/84765785

  • 相关阅读:
    Struts2概述
    Oracle Multitenant Environment (二) Purpose
    Oracle Multitenant Environment (一) About
    oracle 12c之前用sequence 和 trigger来生成自动增长的列
    EPEL reporsitory
    optimizer_index_cost_adj
    oracle rac cache fusion
    一个oracle bug
    django book chapter 2
    linux 中文乱码问题
  • 原文地址:https://www.cnblogs.com/yuzhaoblog/p/10653956.html
Copyright © 2011-2022 走看看