溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mongodb 使用numactl 啟動

發布時間:2020-05-21 10:24:11 來源:網絡 閱讀:34912 作者:xingliguang 欄目:MongoDB數據庫

一、NUMA介紹

在介紹numactl之前,需要先說說NUMA是什么,這樣才能更好的理解numactl。

  NUMA(Non Uniform Memory Access Architecture)字面直譯為"非一致性內存訪問",對于Linux內核來說最早出現在2.6.7版本上。這種特性對于當下大內存+多CPU為潮流的X86平臺來說確實會有不少的性能提升,但相反的,如果配置不當的話,也是一個很大的坑.

  非統一內存訪問(NUMA)是一種用于多處理器的電腦記憶體設計,內存訪問時間取決于處理器的內存位置。 在NUMA下,處理器訪問它自己的本地存儲器的速度比非本地存儲器(存儲器的地方到另一個處理器之間共享的處理器或存儲器)快一些。NUMA架構在邏輯上遵循對稱多處理(SMP)架構。 它是在二十世紀九十年代被開發出來的,開發商包括Burruphs (優利系統), Convex Computer(惠普),意大利霍尼韋爾信息系統(HISI)的(后來的Group Bull),Silicon Graphics公司(后來的硅谷圖形),Sequent電腦系統(后來的IBM),通用數據(EMC), Digital (后來的Compaq ,HP)。 這些公司研發的技術后來在類Unix操作系統中大放異彩,并在一定程度上運用到了Windows NT中。

首次商業化實現基于NUMA的Unix系統的是對稱多處理XPS-100系列服務器,它是由VAST公司的Dan Gielen為HISI設計的。 這個架構的巨大成功使HISI成為了歐洲的頂級Unix廠商。

  NUMA通過提供分離的存儲器給各個處理器,避免當多個處理器訪問同一個存儲器產生的性能損失來試圖解決這個問題。對于涉及到分散的數據的應用(在服務器和類似于服務器的應用中很常見),NUMA可以通過一個共享的存儲器提高性能至n倍,而n大約是處理器(或者分離的存儲器)的個數。

最早Intel在Nehalem架構上實現了NUMA,取代了在此之前一直使用的FSB前端總線的架構,用以對抗AMD的HyperTransport技術。一方面這個架構的特點是內存控制器從傳統的北橋中移到了CPU中,排除了商業戰略方向的考慮之外,這樣做的方法同樣是為了實現NUMA.

   Intel的NUMA解決方案,Litrin始終認為它來自本家的安藤。他的模型有點類似于MapReduce。放棄總線的訪問方式,將CPU劃分到多個Node中,每個node有自己獨立的內存空間。各個node之間通過高速互聯通訊,通訊通道被成為QuickPath Interconnect即QPI。

二、numactl介紹

numactl - Control NUMA policy for processes or shared memory   #官方介紹
翻譯:控制進程或共享內存的NUMA策略

Linux提供了一個手工調優的命令numactl(默認不安裝),首先你可以通過它查看系統的numa狀態

#numactl --hardware 
available: 2 nodes (0-1)
node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
node 0 size: 16290 MB
node 0 free: 11947 MB
node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
node 1 size: 16384 MB
node 1 free: 14282 MB
node distances:
node   0   1 
  0:  10  21 
  1:  21  10 
此系統共有2個node,各領取16個CPU和16G內存。

這里假設我要執行一個java param命令,此命令需要12G內存;一個python param命令,需要16G內存。
最好的優化方案時python在node0中執行,而java在node1中執行,那命令是:
#numactl --cpubind=0 --membind=0 python param
#numactl --cpubind=1 --membind=1 java param
當然,也可以自找沒趣進行如下配置:
#numactl --cpubind=0 --membind=0,1 java param

通過numastat命令可以查看numa狀態
注:numastat - Show per-NUMA-node memory statistics for processes and the operating system
中文翻譯:顯示進程和操作系統的每個NUMA節點內存統計信息
# numastat
                           node0           node1
numa_hit             61086587932     25494360922
numa_miss              101325832     28581785059
numa_foreign         28581785059       101325832
interleave_hit             28949           28518
local_node           61086561129     25494416828
other_node             101352635     28581729153

other_node過高意味著需要重新規劃numa.

三、使用numactl啟動mongodb

#numactl --interleave=all /opt/app/mongodb/bin/mongod -f /etc/mongodb.conf
即分配所有的node供其使用,這也是官方推薦的用法。

四、使用普通用戶啟動mongodb

關閉
#su - mongodb -s /bin/bash -c "/opt/app/mongodb/bin/mongod -f /opt/app/mongodb/etc/mongodb.conf --shutdown"
啟動
#su - mongodb -s /bin/bash -c "numactl --interleave=all /opt/app/mongodb/bin/mongod -f /opt/app/mongodb/etc/mongodb.conf"


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女