MongoDB链接数与链接优化

默认每一个链接数占用10M内存javascript

ulimit -a 查看stack sizejava

MongoDB服务器内存要知足 connection overhead + data size + index sizelinux

即链接数开销+热点数据+索引sql

 

链接数太多的问题:mongodb

若是在日志中遇到相似以下的错误信息:shell

"too many open files"
"too many open connections"

  则说明打开的链接数太多了,有两个限制mongod/mongos链接数的地方:服务器

  操做系统的ulimit限制,能够用ulimit查看open files,是否足够大。linux下默认的open files是1024,在提供服务的时候每每过小。并发

   mongodb自身的限制nosql

mongodb(mongod/mongos)在启动的时候,有个参数是–maxConns,用来指定最大的链接数,默认是20000,也是mongod支持的上限(硬编码,没法修改)。若是达到2万,则说明须要优化mongodb的数据/索引,或者须要扩展db以支持更大的并发数;若是是在参数限制小于2万而出现这个错误,则只须要调整参数便可。2.5.0去除2万的限制,see https://jira.mongodb.org/browse/SERVER-8943优化

 

链接数优化:

经过serverStatus查询链接数:

mongo> db.serverStatus().connections

每一个链接都是一个线程,须要一个Stack,Linux下缺省的Stack设置通常比较大:

shell> ulimit -a | grep stack stack size              (kbytes, -s) 10240

至于MongoDB实际使用的Stack大小,能够用以下命令确认(单位:K):

shell> cat /proc/$(pidof mongod)/limits | grep stack | awk -F 'size' '{print int($NF)/1024}'

若是Stack过大(好比:10240K)的话没有意义,简单对照命令结果中的Size和Rss:

shell> cat /proc/$(pidof mongod)/smaps | grep 10240 -A 10

全部链接消耗的内存加起来会至关惊人,推荐把Stack设置小一点,好比说1024:

shell> ulimit -s 1024

注:从MongoDB1.8.3开始,MongoDB会在启动时自动设置Stack。

 

原文连接:http://nosqldb.org/topic/50ca8a50ee680fee790001f2

相关文章
相关标签/搜索