zoukankan      html  css  js  c++  java
  • 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连接池
  • 相关阅读:
    表达式执行工具方法
    Mysql表创建外键报错
    JVM打印加载类的详情信息
    Shell脚本查询进程存活信息
    旋转数组的最小数字
    斐波那契数列(水题)
    用两个栈实现队列
    变态跳台阶
    跳台阶
    9*9乘法表(5种输出格式)
  • 原文地址:https://www.cnblogs.com/hiyang/p/12631508.html
Copyright © 2011-2022 走看看