zoukankan      html  css  js  c++  java
  • MongoDB连接数与连接优化

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

    ulimit -a 查看stack size

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

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

    连接数太多的问题:

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

    "too many open files"
    "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查询连接数:

    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

  • 相关阅读:
    /proc/kcore失效,调试其文件系统相关模块,使重新正常工作
    linux内核的preempt抢占调度,preempt_count抢占保护“锁”
    linux内核的tiny rcu, tree rcu
    futex-based pthread_cond 源代码分析
    linux 内核的futex
    phtread_mutex 组合
    linux 内核的rt_mutex 锁操作实现的临界区
    linux 内核的RCU本质
    Spring Data(一)概念和仓库的定义
    MongoDB之分片集群(Sharding)
  • 原文地址:https://www.cnblogs.com/unqiang/p/3748271.html
Copyright © 2011-2022 走看看