mongodb connection refused because too many open connections: 819

Posted 一千万年的雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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连接池

以上是关于mongodb connection refused because too many open connections: 819的主要内容,如果未能解决你的问题,请参考以下文章

public class feign.RetryableException feign.RetryableException: Connection refused (Connection refus

mac mysql8 代码连接数据库报错 Connection refused (Connection refused)

K8s 排错--connection refused

Socket Error #10061Connection refused怎么处理

离子 4 网络::ERR_CONNECTION_REFUSED(http://localhost/)

Spotify 播放按钮 - spotilocal.com 错误 - ERR_CONNECTION_REFUSED