MongoDB连接数与连接优化

默认每个连接数占用10M内存

ulimit -a 查看stack size

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

即连接数开销+热点数据+索引

连接数太多的问题:

如果在日志中遇到类似如下的错误信息:

?





1

"too many open files"

?





1

"too many open connections"

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

 操作系统的ulimit限制,可以用ulimit查看open files,是否足够大。linux下默认的open
files是1024,在提供服务的时候往往太小。

mongodb自身的限制

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

连接数优化:

通过serverStatus查询连接数:

?





1

mongo> db.serverStatus().connections

每个连接都是一个线程,需要一个Stack,Linux下缺省的Stack设置一般比较大:

?





1

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

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

?





1

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

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

?





1

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

所有连接消耗的内存加起来会相当惊人,推荐把Stack设置小一点,比如说1024:

?





1

shell> ulimit -s 1024

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

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

时间: 2024-10-07 05:00:25

MongoDB连接数与连接优化的相关文章

mysql优化之连接优化

Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 连接优化 连接优化主要指客户端连接数据库以及数据库为响应客户端的请求而打开数据表和索引的过程中涉及到的参数调整.原文可以参考这里或者这里.(原文链接 http://ddbiz.com/?p=950)尽管不同的mysql发行版本的编译和链接方式也会影响到客户端的链接请求,但是由于我的系统多是直接安装mysql的发行包,且很少会做改动,因此关于手

(一)MySQL 连接优化

一.MySQL 连接优化 1.查看连接参数(show variables) mysql> show variables like '%connect%'; +-----------------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------------+-----------------+ | characte

10 表连接优化

本章提要-----------------------------------------查询优化器要确定多张表的连接顺序和连接方法, 目的是通过尽早的过滤不需要的数据, 减少要处理的数据量.本章会介绍3种基本连接方法: 嵌套循环连接, 合并连接, 哈希连接如何选择连接放的的基本建议.----------------------------------------- 10.1 定义    连接树    数据库引擎支持的所有的连接方法都是每次只能处理两个数据集. 它们被称作 左节点 和 右节点,

mongoDB 用java连接

(1)下载连接java 的驱动包mongo-2.10.1.jar 下载网址 https://github.com/mongodb/mongo-java-driver/downloads (2)导入下载好的驱动包 (3)简单的使用demo import java.net.UnknownHostException; import com.mongodb.DB; import com.mongodb.Mongo; public class SimpleTest { /**   * @param arg

windows平台使用MongoDB shell 来连接 MongoDB 服务器并创建数据库

windows平台使用MongoDB shell 来连接 MongoDB 服务器并创建数据库 命令行进入MongoDB的bin目录运行mongod.exe mongod --dbpath c:\data\db 或者找到MongoDB的bin目录双击运行mongod.exe.待输出 I NETWORK [thread1] waiting for connections on port 27017. 命令行进入MongoDB的bin目录运行: mongo 打开一个连接(默认为本地连接) 这时候你返回

MongoDB(online) 优化

MongoDB(online) 优化 1. find.findOne 2. 操作 vip_emp_relation 的一个公共方法 3. 查询记录数 4. save.insert 5. 总结 1. find.findOne 项目实例 MongoTemplate mongoTemplate = mongodbClient.getMongoTemplate(); DBCollection cursor = mongoTemplate.getCollection("vip_batchsend_mess

MongoDB 连接数高产生原因及解决

MongoDB Sharding架构下连接数很容易达到很高,这里连接数分为几个概念: tcp 连接数 netstat可以统计的,一般这个是最高.如果mongod/mongos在同一台服务器,更明显. 参考命令:netstat -ant|awk ‘{print $5}’ |awk -F: ‘{print $1}’|sort |uniq -c|sort -rn mongos/mongod 连接数 mongostat/db.serverStatus()/connPoolStats可统计. 连接数多高算

为什么 MongoDB 连接数被用满了?

使用 MongoDB 时,可能会遇到因为 mongod 连接数用满了,导致客户端无法连接的问题.mongod的最大连接数通过 net.maxIncomingConnections 指定,默认值为1000000,相当于没有限制,生产环境强烈建议根据实际需求配置,以避免客户端误用导致 mongod 负载过高. Mongod 为什么需要限制连接数? Mongod 的服务模型是每个网络连接由一个单独的线程来处理,每个线程配置了1MB 的栈空间,当网络连接数太多时,过多的线程会导致上下文切换开销变大,同时

mongodb系列~配置文件的优化与处理

一 简介:讲讲如何优化mongo配置文件二 常规参数     port= //端口     fork=true//守护进程方式启动mongo     logpath=shard.log //mongo日志存放路径     journal= true//redo log开启     nohttpinterface = true //关闭http端口,提高安全性     directoryperdb = true // 每个db会创建一个单独的目录     logappend = true //日志