MongoDB文件句柄数限制

MongoDB文件句柄数限制

在实际使用mongodb时, 由于分表较多, 每个表又有若干索引. 当业务量起来时, 经常出现连接池socket连接断开的错误, 排查mongodb的日志, 发现基本都是"Too many open files"错误.

排查问题

  1. 查看当前文件的数量限制

    [root@ip-172-16-1-149 rocky]# ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 29303
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 655350
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 655350
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    

    重点看open files​的值, 此处是655350, 理论上是够用的.

  2. 查找到mongodb的进程

    [root@ip-172-16-1-149 rocky]# ps -axu | grep mongod
    root      647090  2.9 11.3 3419876 860280 ?      Sl   05:56   2:02 /usr/bin/mongod -f /etc/mongod.conf
    
  3. 查看mongodb进行的限制

    [root@ip-172-16-1-149 rocky]# cat /proc/647090/limits
    Limit                     Soft Limit           Hard Limit           Units
    Max cpu time              unlimited            unlimited            seconds
    Max file size             unlimited            unlimited            bytes
    Max data size             unlimited            unlimited            bytes
    Max stack size            8388608              unlimited            bytes
    Max core file size        0                    unlimited            bytes
    Max resident set          unlimited            unlimited            bytes
    Max processes             29303                29303                processes
    Max open files            1024                 65535                files
    Max locked memory         65536                65536                bytes
    Max address space         unlimited            unlimited            bytes
    Max file locks            unlimited            unlimited            locks
    Max pending signals       29303                29303                signals
    Max msgqueue size         819200               819200               bytes
    Max nice priority         0                    0
    Max realtime priority     0                    0
    Max realtime timeout      unlimited            unlimited            us
    

    可以看到mongodb进程open files​数量限制中, 被Soft Limit​限制为1024了

  4. 临时方案修改

    [root@ip-172-16-1-149 rocky]# prlimit --pid 647090--nofile=65535:65535
    

    再次通过查看/proc/{pid}/limits​可以看到, open files​的限制都被修改为65535了. 但是这种方式只能针对这个mongodb进程临时生效, 当mongodb重启后又会恢复为之前的状态

  5. 永久方案修改

    在实际操作时, 修改service信息没有生效, 暂时没有继续研究了, 后续可以参考以下文档进行测试

    too many open files 问题解决方法

    MongoDB Too many open files 异常的解决

    MongoDB报Too many open files解决方法

posted @   笨鸡蛋9毛  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示