MongoDB性能优化之连接优化

本文是BoxedIce公司遇到的一个真实案例,如果你正在使用MongoDB的话,此文又是一个实用教材。

BoxedIce在plugin directory项目中添加了新的WEB机器结点后,发现其MongoDB集群的性能开始受到影响,表现在请求的高峰时期,MongoDB的响应时间变得非常长。

通过监控发现,在其高峰时间MongoDB的连接数达到了1100~1500左右,由于每个连接需要使用10M(stack size默认为10240)的内存,这导致相当大的内存开销。

BoxedIce的处理方法是,首先通过优化连接池,将连接数控制在了800个左右,然后通过修改内核的stack size值,从默认的10M修改到1M,使连接占用的内存大大减少。


MongoDB连接数过多的话,会拖累性能,可以通过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://blog.nosqlfan.com/html/1838.html

http://huoding.com/2011/08/19/107

http://blog.boxedice.com/2011/06/08/mongodb-connection-overhead/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值