阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MongoDB 使用numactl 启动

123次阅读
没有评论

共计 2886 个字符,预计需要花费 8 分钟才能阅读完成。

一、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 – 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 相关教程见以下内容

MongoDB 文档、集合、数据库简介  http://www.linuxidc.com/Linux/2016-12/138529.htm

MongoDB 3 分片部署及故障模拟验证  http://www.linuxidc.com/Linux/2016-12/138529.htm

Linux CentOS 6.5 yum 安装 MongoDB  http://www.linuxidc.com/Linux/2016-12/137790.htm

CentOS 7 yum 方式快速安装 MongoDB  http://www.linuxidc.com/Linux/2016-11/137679.htm

MongoDB 的查询操作  http://www.linuxidc.com/Linux/2016-10/136581.htm

MongoDB 权威指南第 2 版 PDF 完整带书签目录 下载见 http://www.linuxidc.com/Linux/2016-12/138253.htm

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143426.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2886字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中