Mongodb性能优化之连接优化
2012-12-12 14:25
176 查看
项目中添加了新的WEB机器结点后,发现其MongoDB集群的性能开始受到影响,表现在请求的高峰时期,MongoDB的响应时间变得非常长。
通过监控发现,在其高峰时间MongoDB的连接数达到了1100~1500左右,由于每个连接需要使用10M(stack
size默认为10240)的内存,这导致相当大的内存开销。
BoxedIce的处理方法是,首先通过优化连接池,将连接数控制在了800个左右,然后通过修改内核的stack
size值,从默认的10M修改到1M,使连接占用的内存大大减少。
MongoDB连接数过多的话,会拖累性能,可以通过serverStatus查询连接数:
每个连接都是一个线程,需要一个Stack,Linux下缺省的Stack设置一般比较大:
至于MongoDB实际使用的Stack大小,可以用如下命令确认(单位:K):
如果Stack过大(比如:10240K)的话没有意义,简单对照命令结果中的Size和Rss:
所有连接消耗的内存加起来会相当惊人,推荐把Stack设置小一点,比如说1024:
注:从MongoDB1.8.3开始,MongoDB会在启动时自动设置Stack。
通过监控发现,在其高峰时间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。
相关文章推荐
- MongoDB性能优化之连接优化
- MongoDB性能优化之连接优化
- 云MongoDB优化让LBS服务性能提升十倍
- MongoDB MapReduce 性能提升20倍的优化宝典
- mongodb性能优化
- MongoDB MapReduce 性能提升20倍的优化宝典
- mongodb 性能优化深入浅出
- mongodb的监控与性能优化
- mongoDb固定集合与性能优化
- Mongodb高级篇-性能优化
- MongoDB性能优化五个简单步骤
- 重谈字符串连接性能(下):分析优化
- hibernate系列十五:hql连接查询,查询性能优化,hql批量增删改
- 第六章——根据执行计划优化性能(1)——理解哈希、合并、嵌套循环连接策略
- 连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑
- MongoDB集群性能优化
- 基于mongoDB的capped collection的性能优化
- lua程序性能优化(字符串连接与格式化)
- MongoDB性能优化
- mongodb的监控与性能优化