国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL OOM 系列一 Linux內(nèi)存分配

2024-07-24 12:53:58
字體:
供稿:網(wǎng)友

RDS(網(wǎng)易云關(guān)系數(shù)據(jù)庫服務(wù))上線已經(jīng)有一段時(shí)間,陸續(xù)不斷有產(chǎn)品遷入到了RDS中,在線上運(yùn)維的過程中,也遇到了一些曾經(jīng)沒有考慮到,或者考慮的不全的東西。后續(xù)有時(shí)間可以分享給大家。

今天想提到的是線上一個(gè)4G的RDS實(shí)例,發(fā)生了OOM(out of memory)的問題,MySQL進(jìn)程被直接Kill掉了。在解釋這個(gè)問題的時(shí)候,我們首先需要從Linux系統(tǒng)內(nèi)存分配策略講起。
    一般寫C語言程序,我們習(xí)慣使用malloc動(dòng)態(tài)的申請(qǐng)內(nèi)存空間(Java由JVM負(fù)責(zé)內(nèi)存管理),malloc函數(shù)會(huì)向操作系統(tǒng)申請(qǐng)一段連續(xù)的內(nèi)存單元,然后返回這段空間的起始地址。如果malloc函數(shù)返回為null則表示系統(tǒng)沒有可分配的內(nèi)存空間。這是我們的一般思維,當(dāng)然這在某些操作系統(tǒng)中確實(shí)也是正確的(Solaris)。
     但是Linux不是這樣的,Linux的內(nèi)存分配采取的是一種更加積極的分配策略,它假設(shè)應(yīng)用申請(qǐng)了內(nèi)存空間后并不會(huì)立即去使用它,所以允許一定量的超售,當(dāng)應(yīng)用真的需要使用它的時(shí)候,操作系統(tǒng)可能已經(jīng)通過回收了其他應(yīng)用的內(nèi)存空間而變得有能力去滿足這個(gè)應(yīng)用的需求,簡單的說,就是允許應(yīng)用申請(qǐng)比實(shí)際可分配空間(包括物理內(nèi)存和Swap)更多的內(nèi)存,這個(gè)特性稱為OverCommit。
      這個(gè)特性在Linux操作系統(tǒng)里面也是可配的,可以通過設(shè)置/proc/sys/overcommit_memory為不同的值來調(diào)整OverCommit策略。
     overcommit_memory可以取3個(gè)值:
0:默認(rèn)值,由Linux內(nèi)核通過一些啟發(fā)式算法來決定是否超售和超售的大小,一般允許輕微的超售,拒絕一些明顯不可能提供的請(qǐng)求,同時(shí)做一些規(guī)則限制,比如不同用戶overcommit的大小也不一樣。
1:允許,不做限制的超售,當(dāng)然這個(gè)也不是無限大,還受到尋址空間的限制,32位系統(tǒng)最大可能只有4G,64位系統(tǒng)大概16T左右。
2:禁止,禁止超售,系統(tǒng)能夠分配的內(nèi)存不會(huì)超過swap+實(shí)際物理內(nèi)存*overcommit_ratio,該值可以通過/proc/sys/vm/overcommit_ratio設(shè)置,默認(rèn)50%。

    為了驗(yàn)證Linux的內(nèi)存分配,我們用個(gè)小程序來測(cè)試一下:

#include <stdio.h>#include <stdlib.h>#define MEGABYTE 1024*1024int main(int argc, char *argv[]){ void *myblock = NULL; int count = 0; while (1) { myblock = (void *) malloc(MEGABYTE); if (!myblock) break; printf("Currently allocating %d MB/n", ++count); } exit(0);}#include <stdio.h>#include <stdlib.h>#define MEGABYTE 1024*1024int main(int argc, char *argv[]){ void *myblock = NULL; int count = 0; while(1) { myblock = (void *) malloc(MEGABYTE); if (!myblock) break; memset(myblock,1, MEGABYTE); printf("Currently allocating %d MB/n",++count); } exit(0); }
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 锦屏县| 海阳市| 兴业县| 汕头市| 鞍山市| 定南县| 罗田县| 馆陶县| 汝阳县| 绿春县| 黑河市| 墨江| 离岛区| 满洲里市| 宣汉县| 科尔| 班戈县| 博兴县| 顺义区| 阳高县| 什邡市| 吉首市| 商水县| 康保县| 云和县| 平乐县| 长武县| 聂拉木县| 丽水市| 台安县| 城市| 武清区| 井陉县| 美姑县| 湟源县| 邛崃市| 浮山县| 三门县| 南投市| 余干县| 商水县|