mongodb的NUMA问题
[loguser@32_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内存分配策略。这个配置选项导致资源独占程序非常easy将某个node的内存用尽。
而当某个node的内存耗尽时,Linux又刚好将这个node分配给了某个须要消耗大量内存的进程(或线程)。swap就妥妥地产生了。
虽然此时还有非常多page cache能够释放。甚至还有非常多的free内存。
四、解决swap问题
虽然NUMA的原理相对复杂,实际上解决swap却非常简单:只要在启动MySQL之前使用numactl –interleave来改动NUMA策略就可以。
值得注意的是。numactl这个命令不只能够调整NUMA策略,也能够用来查看当前各个node的资源是用情况,是一个非常值得研究的命令。
mongodb的NUMA问题的更多相关文章
- Mongodb在NUMA机器上的优化
10gen在mongodb的部署指南上,提到了在NUMA机器上,mongodb可能会出现问题,参见:http://docs.mongodb.org/manual/administration/prod ...
- 实记处理mongodb的NUMA问题
一次在启动mongodb的过程中,出现过NUMA这个问题, mongodb日志显示如下: WARNING: You are running on a NUMA machine. We suggest ...
- [译]MongoDb生产环境注意事项
译注: 本文是翻译MongoDB Manuel中的MongoDB Production Notes一节内容.这节内容重点关注生产环境中影响性能和可靠性的各种注意事项,值得正在部署MongoDB的工作者 ...
- (转) 线上环境部署MongoDB的官方建议
本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1 ...
- MongoDB在Linux下常用优化设置
MongoDB在Linux下常用优化设置 以下是一些MongoDB推荐的常用优化设置.在生产环境下选取合适的参数值,例如预读值和默认文件描述符数目等,会对系统性能有很大的影响. 1.关闭数据库文件的 ...
- MongoDB实战性能优化
1. 性能优化分类 mongodb性能优化分为软件层面和操作系统层面. 软件层面,一般通过修改mongodb软件配置参数来达到,这个需要非常熟悉mongodb里面的各种配置参数: 而操作系统层面,相对 ...
- mongodb安装建议
1)软件包的选择 确保使用最新的稳定版本.目前我们线上使用的版本是2.4.6.MongoDB软件包下载页面http://www.mongodb.org/downloads. 确保线上环境总是使用64位 ...
- NUMA的取舍与优化设置
在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%; 在bios层面numa关闭时,无论os层面的numa是否打开,都不会影响性能. 安装numactl: ...
- (转)部署MongoDB时需要注意的调参
部署MongoDB的生产服务器,给出如下相关建议: 使用虚拟化环境: 系统配置 1)推荐RAID配置 RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列 ...
随机推荐
- python实现查有道词典
因为要考英语四级,所以我今天一大早就起来被英语单词,但是作为英语渣渣的我,只能是在网页上挨个查单词的意思.查的多了,心生厌倦,便想着如何才能在终端下查单词,那样速度不就很快了? NOW,我仔细观察每次 ...
- NoSQL:linux操作memcached
缓存数据库 一 NoSQL简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系 ...
- Dev控件 galleryControl
发现一个规律,不会的控件先拖到界面上,右上角需要add 的就对应add一个.然后就是找属性和集合手动添加几个. 然后把XXXForm.Designer.cs 里面的代码提取到逻辑代码中,就把常量换成变 ...
- Attribute在.NET编程中的应用(三)
用于参数的Attribute 在编写多层应用程序的时候,你是否为每次要写大量类似的数据访问代码而感到枯燥无味?比如我们需要编写调用存储过程的代码,或者编写T_SQL代码,这些代码往往需要传递各种参数, ...
- [转载] Thrift-client与spring集成
转载自http://shift-alt-ctrl.iteye.com/blog/1990030?utm_source=tuicool&utm_medium=referral Thrift-cl ...
- 【Java框架型项目从入门到装逼】第二节 - Spring框架 AOP的丧心病狂解说,你喜欢露娜的月下无限连吗?
继续上一节的内容,多几个jar包: aop技术是面向切面编程思想,作为OOP的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想.AOP底层也是面向对象:只不过面向的不是普通的O ...
- 《Metasploit魔鬼训练营》第四章(上)
p128 wmap 和昨天一样,我用这些漏洞扫描工具去扫testfire.net或者owaspbwa都扫不出漏洞!不明白! 补充:原来是网络不知道啥时候自己断了.连上后再次扫描就成功了:
- 但未在用户代码中进行处理 具有固定名称“Oracle.ManagedDataAccess.Client”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载。
这是使用ODP.NET链接Orcl数据库常见错误,需要配置系统环境变量. 解决方法如下: 找到以下路径文件:C:\Windows\Microsoft.NET\Framework\v4.0.30319\ ...
- Kaggle初入门
今天成功的进驻kaggle社区了! 所以以后就要跟kaggle上面的各位一起学习啦! 今天十分成功的在tensorflow的环境里面装了一堆库--什么seaborn啊pandas啊都一次过 然后--并 ...
- 用python实现一个简单的词云
对于在windows(Pycharm工具)里实现一个简单的词云还是经过了几步小挫折,跟大家分享下,如果遇到类似问题可以参考: 1. 导入wordcloud包时候报错,当然很明显没有安装此包. 2. 安 ...