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的連接數滿了。
排錯過程
- 查看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 控制。