mongodb的NUMA問題

來源:互聯網
上載者:User

標籤:

?? 問題:在mongodb登入時日誌顯示如下:

[[email protected]_180 ~]$ mongo -u root -p xxxxx --authenticationDatabase admin
MongoDB shell version: 2.6.4
connecting to: test
Server has startup warnings:
2015-07-16T04:35:34.694+0800 [initandlisten]
2015-07-16T04:35:34.694+0800 [initandlisten] ** WARNING: You are running on a NUMA machine.
2015-07-16T04:35:34.694+0800 [initandlisten] **          We suggest launching mongod like this to avoid performance problems:
2015-07-16T04:35:34.694+0800 [initandlisten] **              numactl --interleave=all mongod [other options]
2015-07-16T04:35:34.694+0800 [initandlisten]


解決方案:


1.在原啟動命令前面加numactl –interleave=all

如# numactl –interleave=all ${MONGODB_HOME}/bin/mongod –config conf/mongodb.conf


2.修改核心參數

echo 0 > /proc/sys/vm/zone_reclaim_mode

http://www.mongodb.org/display/DOCS/NUMA


下面是NUMA簡介:


一、NUMA和SMP


NUMA和SMP是兩種CPU相關的硬體架構。在SMP架構裡面,所有的CPU爭用一個匯流排來訪問所有記憶體,優點是資源共用,而缺點是匯流排爭用激烈。隨著PC伺服器上的CPU數量變多(不僅僅是CPU核心數),匯流排爭用的弊端慢慢越來越明顯,於是Intel在Nehalem CPU上推出了NUMA架構,而AMD也推出了基於相同架構的Opteron CPU。

NUMA最大的特點是引入了node和distance的概念。對於CPU和記憶體這兩種最寶貴的硬體資源,NUMA用近乎嚴格的方式劃分了所屬的資源群組(node),而每個資源群組內的CPU和記憶體是幾乎相等。資源群組的數量取決於物理CPU的個數(現有的PC server大多數有兩個物理CPU,每個CPU有4個核);distance這個概念是用來定義各個node之間調用資源的開銷,為資源調度最佳化演算法提供資料支援。


二、NUMA相關的策略


1、每個進程(或線程)都會從父進程繼承NUMA策略,並分配有一個優先node。如果NUMA策略允許的話,進程可以調用其他node上的資源。

2、NUMA的CPU分配策略有cpunodebind、physcpubind。cpunodebind規定進程運行在某幾個node之上,而physcpubind可以更加精細地規定運行在哪些核上。

3、NUMA的記憶體配置策略有localalloc、preferred、membind、interleave。localalloc規定進程從當前node上請求分配記憶體;而preferred比較寬鬆地指定了一個推薦的node來擷取記憶體,如果被推薦的node上沒有足夠記憶體,進程可以嘗試別的node。membind可以指定若干個node,進程只能從這些指定的node上請求分配記憶體。interleave規定進程從指定的若干個node上以RR演算法交織地請求分配記憶體。


三、NUMA和swap的關係


可能大家已經發現了,NUMA的記憶體配置策略對於進程(或線程)之間來說,並不是公平的。在現有的Redhat Linux中,localalloc是預設的NUMA記憶體配置策略,這個配置選項導致資源獨佔程式很容易將某個node的記憶體用盡。而當某個node的記憶體耗盡時,Linux又剛好將這個node分配給了某個需要消耗大量記憶體的進程(或線程),swap就妥妥地產生了。儘管此時還有很多page cache可以釋放,甚至還有很多的free記憶體。


四、解決swap問題


雖然NUMA的原理相對複雜,實際上解決swap卻很簡單:只要在啟動MySQL之前使用numactl –interleave來修改NUMA策略即可。

值得注意的是,numactl這個命令不僅僅可以調整NUMA策略,也可以用來查看當前各個node的資源是用情況,是一個很值得研究的命令。

mongodb的NUMA問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.