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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM