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

相關文章
相關標籤/搜索