亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL OOM 系統二 OOM Killer

2024-07-24 13:10:05
字體:
來源:轉載
供稿:網友

這里就涉及到一個問題,到底Kill掉誰呢?一般稍微了解一些Linux內核的同學第一反應是誰用的最多,就Kill掉誰。這當然是Linux內核首先考慮的一種重要因素,但是也不完全是這樣的,我們查一些Linux的內核方面的資料,可以知道其實Kill誰是由/proc/<pid>/oom_score來決定的,這個值每個進程一個,是由Linux內核的oom_badness()函數負責計算的。那下面我們來仔細讀一讀badness()函數。  

在badness()函數的注釋部分,寫明了badness()函數的處理思路:

         1) we lose the minimum amount of work done
         2) we recover a large amount of memory
         3) we don't kill anything innocent of eating tons of memory
         4) we want to kill the minimum amount of processes (one)
         5) we try to kill the process the user expects us to kill, this  algorithm has been meticulously tuned to meet the principle of least surprise ... (be careful when you change it)

總的來說就是Kill掉最小數量的進程來獲取最大數量的內存,這與我們Kill掉占用內存最大的進程是吻合的。

        /*
         * The memory size of the process is the basis for the badness.
         */

         points = p->mm->total_vm;

分數的起始是進程實際使用的RAM內存,注意這里不包括SWAP,即OOM Killer只會與進程實際的物理內存有關,與Swap是沒有關系的,并且我們可以看到,進程實際使用的物理內存越多,分數就越高,分數越高就越容易被犧牲掉。

        /*
         * Processes which fork a lot of child processes are likely
         * a good choice. We add the vmsize of the childs if they
         * have an own mm. This prevents forking servers to flood the
         * machine with an endless amount of childs
         */
          ...
                  if (chld->mm != p->mm && chld->mm)
                        points += chld->mm->total_vm;

這段表示子進程占用的內存都會計算到父進程上。

        s = int_sqrt(cpu_time);
        if (s)
                points /= s;
        s = int_sqrt(int_sqrt(run_time));
        if (s)
                points /= s;

 這表明進程占用的CPU時間越長或者進程運行的時間越長,分數越低,越不容易被Kill掉。

       /*
        * Niced processes are most likely less important, so double
        * their badness points.
        */
        if (task_nice(p) > 0)
                points *= 2;

          如果進程優先級低(nice值,正值低優先級,負值高優先級),則Point翻倍。

       /*
        * Superuser processes are usually more important, so we make it
        * less likely that we kill those.
        */
        if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_ADMIN) ||
                                p->uid == 0 || p->euid == 0)
                points /= 4;

          super用戶的進程優先級較低。

        /*
         * We don't want to kill a process with direct hardware access.
         * Not only could that mess up the hardware, but usually users
         * tend to only have this flag set on applications they think
         * of as important.
         */
        if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_RAWIO))
                points /= 4;

          直接可以訪問原始設備的進程優先級較高。

        /*
         * Adjust the score by oomkilladj.
         */
        if (p->oomkilladj) {
                if (p->oomkilladj > 0)
                        points <<= p->oomkilladj;
                else
                        points >>= -(p->oomkilladj);

        }

每個進程有個oomkilladj 可以設置該進程被kill的優先級,這個參數看上去對Point影響還是比較大的,oomkilladj 最大+15,最小是-17,越大越容易被干掉,這個值由于是移位運算,所以影響還是比較大的。

下面我寫個小程序實驗一下:

 #define MEGABYTE 1024*1024*1024 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char *argv[]){void *myblock = NULL;myblock = (void *) malloc(MEGABYTE);printf("Currently allocating 1GB/n");sleep(1);int count = 0;while( count < 10){ memset(myblock,1,100*1024*1024); myblock = myblock + 100*1024*1024; count++; printf("Currently allocating %d00 MB/n",count); sleep(10);  }  exit(0); }

上面的程序先申請一個1G的內存空間,然后100M為單位,填充這些內存空間。在一個2G內存,400M Swap空間的機器上跑3個上面的進程。我們看一下運行結果:

   OOM,Killer

     test1、test2、test3分別申請了1G的虛擬內存空間(VIRT),然后每隔10s,實際占用的RAM空間就增長100M(RES)。

    OOM,Killer

    當物理內存空間不足時,OS開始進行Swap,可用的Swap空間開始減少。

   OOM,Killer
    

     當內存是在沒有可分配的空間時,test1進程被操作系統Kill掉了。dmesg 我們可以看到,test1進程被OS Kill掉,同時oom_score為1000。

 

     這3個進程的oom_adj全部都是默認值0。下面我們來實驗一下設置了oom_adj的效果。重新啟動3個進程,然后我們看到test2的PID是12640

   OOM,Killer    

   我們運行一下下面的語句

   echo 15 > /proc/12640/oom_adj

  一段時間后,我們看到Swap空間急劇減少,基本上OS OOM_Killer要開動了。 

   OOM,Killer

     果然,不出意料,12640進程被kill掉了。

 

     所以為了避免自己需要的進程被kill掉,可以通過設置進程的oom_adj來實現。當然,有的人會說,這一切都是超售引起的,既然Linux提供了overcommit_memory可以禁用overcommit特性,那為什么不禁用呢。這有利也有弊,一旦禁用overcommit,就意味著MySQL根本無法申請超過實際內存的空間,而在MySQL中,存在很多動態申請內存空間的地方,如果申請不到,MySQL就會Crash,這大大增加了MySQL宕機的風險,這也是Linux為什么要overcommit的原因。

      有了上面的分析,我們不難看出,如果在不設置oom_adj的前提下,MySQL一般都會成為OOM_Killer的首選對象,因為MySQL一般都是內存的最大占用者。那作為MySQL,我們如何盡量的去規避被Kill的風險呢,下一章我們將重點從MySQL的角度分析如何規避OOM。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黑丝美女久久久| 久久久精品国产一区二区| 欧美极品美女电影一区| 日韩av免费看网站| 中文欧美在线视频| 在线丨暗呦小u女国产精品| 国产69久久精品成人看| 亚洲人成在线观| 成人妇女免费播放久久久| 中文字幕免费精品一区高清| 亚洲天堂av在线免费| 国产精品一区二区久久精品| 久久九九精品99国产精品| 欧美伊久线香蕉线新在线| 亚洲第一网站免费视频| 日韩在线免费高清视频| 欧美大成色www永久网站婷| 亚洲福利影片在线| 亚洲欧美一区二区三区久久| 91经典在线视频| 欧美激情一区二区久久久| 亚洲免费一在线| 色琪琪综合男人的天堂aⅴ视频| 欧美成人免费va影院高清| 成人444kkkk在线观看| 国产中文字幕亚洲| 亚洲精品综合久久中文字幕| 欧美专区在线观看| 日韩av一区在线| 欧洲日本亚洲国产区| 色偷偷av一区二区三区乱| 欧美精品做受xxx性少妇| 久热精品视频在线| 亚洲男女自偷自拍图片另类| 亚洲bt欧美bt日本bt| 欧美精品免费播放| 成人激情春色网| 欧美激情免费看| 欧美性极品xxxx娇小| 国产精品男人爽免费视频1| 日韩国产欧美区| 国产精品91免费在线| 欧美一二三视频| 最近中文字幕2019免费| 国模gogo一区二区大胆私拍| 精品欧美国产一区二区三区| 91国产视频在线播放| 色综合影院在线| 69久久夜色精品国产69| 亚洲少妇激情视频| 日本成熟性欧美| 中文字幕欧美日韩精品| 亚洲欧洲在线播放| 青青草一区二区| 国内精久久久久久久久久人| 97在线视频免费看| 神马久久桃色视频| 国产欧美在线观看| 欧美美女操人视频| 国产日韩欧美黄色| 午夜精品久久久久久久99热浪潮| 亚洲人成亚洲人成在线观看| 亚洲国产高清福利视频| 奇门遁甲1982国语版免费观看高清| 亚洲人成网7777777国产| 日韩国产精品一区| 日韩av片免费在线观看| 欧美日韩亚洲视频一区| 欧美亚洲一区在线| 亚洲视频欧美视频| 91色中文字幕| 亚洲已满18点击进入在线看片| 国产成人精品一区二区三区| 欧美高清不卡在线| 91精品国产高清| 国产精品99免视看9| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品com| 精品国产欧美一区二区五十路| 国产在线播放不卡| 欧美国产日本高清在线| 国产成人精品视| 成人免费自拍视频| 久久久久久久影院| 国产日韩在线视频| 亚洲成av人乱码色午夜| 亚洲国产欧美一区二区三区久久| 欧美性猛交xxxx偷拍洗澡| 亚洲第一网站免费视频| 狠狠综合久久av一区二区小说| 国产激情视频一区| 91高潮精品免费porn| 欧美日本高清视频| 国产精品一区二区三| 国产日韩视频在线观看| 国产69精品久久久久9| 欧美美最猛性xxxxxx| 亚洲а∨天堂久久精品9966| 亚洲一二在线观看| 成人黄色午夜影院| 日韩欧美在线国产| 黑丝美女久久久| 日本久久久久久久久| 国自产精品手机在线观看视频| 日韩av不卡在线| 国产伊人精品在线| 日韩中文字幕在线| 国产999精品久久久影片官网| 久久久久久美女| 亚洲网站在线播放| 国内揄拍国内精品少妇国语| 国产一区二区视频在线观看| 91在线中文字幕| 日本一区二区在线播放| 1769国内精品视频在线播放| 国产精品入口夜色视频大尺度| 亚洲精品福利资源站| 中文字幕精品网| 狠狠操狠狠色综合网| 亚洲福利在线视频| 日韩午夜在线视频| 91视频8mav| 亚洲xxxx视频| 久久成人国产精品| 日韩av快播网址| 精品亚洲aⅴ在线观看| 国产一区二区三区在线| 中文在线不卡视频| 日韩三级成人av网| 97超碰蝌蚪网人人做人人爽| 色噜噜狠狠狠综合曰曰曰88av| 国产日韩综合一区二区性色av| www.99久久热国产日韩欧美.com| 久久免费视频在线| 欧美在线播放视频| 亚洲视频在线免费观看| 国产精品吹潮在线观看| 精品免费在线观看| 久久视频国产精品免费视频在线| 97在线视频免费| 欧美视频第一页| 欧美第一页在线| 久久在精品线影院精品国产| 成人激情视频在线观看| 欧美丰满少妇xxxxx| 国产美女91呻吟求| 日韩精品中文字幕久久臀| 欧美大片网站在线观看| 伊人久久久久久久久久久久久| 亚洲成人黄色网址| 91久久国产婷婷一区二区| 国产精品777| 2021国产精品视频| 久久伊人免费视频| 亚洲午夜精品久久久久久久久久久久| 欧美怡红院视频一区二区三区| 亚洲精品综合久久中文字幕| 国语自产精品视频在线看抢先版图片| 亚洲成av人影院在线观看| 久久久国产一区二区| 国产日韩换脸av一区在线观看| 亚洲电影第1页| 中文在线资源观看视频网站免费不卡| 日韩在线视频免费观看高清中文|