Mongodb 使用numactl 启动

一、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供其使用,这也是官方推荐的用法。
时间: 2024-10-27 08:20:13

Mongodb 使用numactl 启动的相关文章

mongodb安装脚本/启动脚本/配置文件

安装脚本 #!/bin/bash  #author: QingFeng #qq: 530035210 #blog: http://my.oschina.net/pwd/blog  #自动安装mongodb和初始化配置 #缺省的配置如下   logdir=/data/log/shell          #日志路径 log=$logdir/shell.log            #日志文件  is_font=1                #终端是否打印日志: 1打印 0不打印  is_log

MongoDB服务无法启动,发生服务特定错误:100

问题:MongoDB服务无法启动,发生服务特定错误:100 原因:没有正常关闭mongod服务,导致mongod被锁 解决方案:进入db文件夹,删除mongod.lock文件,然后重新启动服务即可

MongoDB安装,启动,注册为windows系统服务

MongoDB安装与启动 周建旭 2014-08-10 解压完后配置环境变量 下载Windows 32-bit或64-bit版本并解压缩,程序文件都在bin目录中,其它两个目录分别是C++调用是的头文件和库文件. bin目录中包含如下几个程序: 1. mongo.exe,命令行客户端工具. 2. mongod.exe,数据库服务程序. 3. mongodump.exe,数据库备份程序. 4. mongoexport.exe,数据导出工具. 5. mongofiles.exe,GridFS工具.

Mongodb安装与启动

Mongodb安装与启动 1.首先根据对应的操作系统下载对应的Mongodb版本,本文描述为64bit windows7环境下操作. 2.解压压缩包放置到你指定的位置,如E:\dev. 在上图所示的文件夹下,也可以自定义其他路径,用于放置数据文件. 在该路径下新建一个logs文件夹,存放日志.在logs下新建一个mongodb.log(很重要). 3.mongodb的启动和mysql启动有点类似,为了避免每次都去执行批处理文件启动服务,我们在此创建一个Mongodb启动服务. 在命令窗口中执行:

mongodb数据库的启动和停止

数据库的启动和停止是数据库最基本的操作,也是数据库能够提供服务和被连接管理的前提条件.不同的数据库启动和停止的方式有一些差异,但也有相同之处,启动和关闭也必定会和数据库的进程有关. 在oracle数据库中,数据库的启动和停止都是分三个过程的,正常的启动方法都是在sqlplus中执行startup命令启动,或者shutdown immediate命令关闭数据库: 在一些特殊的情况下,会通过shutdown abort或者kill后台进程的方式强制关闭数据库: 在MySQL数据库中,数据库的启动也是

操作3 mongodb和mysql 开启慢查询日志 ,以及mongodb从配置文件启动

1. mongodb从配置文件启动 创建配置文件:/usr/local/mongodb/etc/mongodb.conf 配置文件的内容为: #Directory and relavent set dbpath = /var/mongodb/data logpath = /var/mongodb/logs/log.log profile=2 slowms=100 #repairpath = /var/mongodb/repair pidfilepath = /usr/local/mongodb/

MongoDB 的安装启动

MongoDB 的安装启动 关于Mongodb的下载和安装如同平常APP一样. Mongodb的准备工作: 1.在安装Mongodb的目录下创建两个文件夹:如:Mongodb\data\db Mongodb\data\log\mongod.log 这里mongod.log是格式为log的文件:db为文件夹 2.修改配置文件,在Mongodb文件夹下找mongod.cfg文件,如果没有就自己建一个,将内容修改为: systemLog: destination: file path: E:\pyth

window系统之mongoDB安装,启动及如何设置为windows服务(总结)

一: 下载 上MongoDB官网 ,下载适合的自己电脑系统相对应的版本,安装到合适的位置.我这里下载的为: 安装之后我就放到"D盘",改下文件夹名字为"mongodb"(data,etc,logs三个文件夹为后面自己创建的,稍后说明). 二:开启服务与关闭 创建数据库目录D:\mongodb\data,接下来打开cmd命令行窗口,切换到D:\mongodb\bin 目录执行如下命令(其中 --dbpath是指定数据库存放目录,这里要注意有两个 "-&quo

ububtu mongodb安装及启动_md

ububtu mongodb安装及启动 一 安装 ubuntu 提供的 mongodb 不是由MongoDB官方提供维护的,并且是与MongoDB官方提供的会产生冲突的包 MongoDB官方提供了自己的官方仓库, 这个仓库中主要包含五个包: PackageName Description mongodb-org 一个元数据包, 会自动安装下面的四个包 mongodb-org-server 包含mongod守护程序,关联的init脚本和配置文件(/etc/mongod.conf) mongodb-