mongodb connection refused because too many open connections: 819


Env

Debian 9

# 使用通用二進制方式安裝
# mongod --version  
db version v3.4.21-2.19
git version: 2e0631f5e0d868dd51b71e1e55eb8a57300d00df
OpenSSL version: OpenSSL 1.0.2q  20 Nov 2018
allocator: tcmalloc
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

報錯

程序連接數據庫報錯,mongodb日志中顯示connection refused because too many open connections: 819

初步判定是mongodb的連接數滿了。

排錯過程

  1. 查看mongo連接數
xxx:PRIMARY> db.serverStatus().connections
{ "current" : 819, "available" : 0, "totalCreated" : 1132 }

--> 連接數果然滿了
2. 嘗試修改連接數,mongo啟動時增加 --maxConns 20000 參數,重啟mongo,一會連接數又滿了,一些資料上說最大是 20000,默認是1024 * 0.8 個
3. 查看 ulimit -n,這個值是 1048576,符合預期。
4. 修改 supervisord 的配置 minfds=1024 為 100000,重啟后查看連接數,符合預期。

xx:PRIMARY> db.serverStatus().connections
{ "current" : 1220, "available" : 78780, "totalCreated" : 2158 }

總結

mongod的連接數受限於

  • ulimit -n 系統級
  • supervisord minfds 參數
  • mongo maxConns 參數

最終,只設置minfds參數,不設置maxConns 參數,這樣連接數由 supervisor 控制。

參考

  1. supervisor
  2. maxconn
  3. 深入了解MongoDB連接池


免責聲明!

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



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