设为首页 收藏本站
查看: 1023|回复: 0

[经验分享] Mongodb 使用numactl 启动

[复制链接]

尚未签到

发表于 2018-10-25 09:27:58 | 显示全部楼层 |阅读模式
  一、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"



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-626188-1-1.html 上篇帖子: MongoDB 使用Index 下篇帖子: 从mongodb中查询数据
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表