【问题标题】:Mosquitto increase max connectionsMosquitto 增加最大连接数
【发布时间】:2016-10-23 03:14:34
【问题描述】:

我安装了mosquitto,在里面改了很多设置

/etc/security/limits.conf
/etc/sysctl.cnof
/etc/pam.d/common-session
/etc/pam.d/common-session-noninteractive

细节改变:

$ sudo vim /etc/sysctl.conf

fs.file-max=2097152
fs.nr_open=2097152
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=16384
net.core.netdev_max_backlog=16384
net.ipv4.ip_local_port_range='1025 65535'
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.optmem_max=16777216
net.ipv4.tcp_rmem='1024 4096 16777216'
net.ipv4.tcp_wmem='1024 4096 16777216'
net.ipv4.tcp_max_tw_buckets=1048576
net.ipv4.tcp_fin_timeout=15

$ sudo vim /etc/security/limits.conf

*       hard    nofile  1048576
*       soft    nofile  1048576
*       hard    nproc   1048576
*       soft    nproc   1048676

$ sudo vim /etc/pam.d/common-session
$ sudo vim /etc/pam.d/common-session-noninteractive

session required pam_limits.so

但是这样做之后,mosquitto 仍然可以支持 1024 个连接。

所以我使用cat /etc/{pid}/limits 来检查蚊子的限制

然后发现mosquitto的限制还是默认的

Max processes             7968                 7968      processes
Max open files            1024                 4096      files

我发现mosquitto是nologin用户,无法触发PAM限制配置。而如果我使用prlimit命令增加soft openfile限制,mosquitto确实可以增加最大连接数,但是受到硬限制(4096)的限制。

似乎debian仍然无法做到这一点(Reference),所以一个可能的解决方案是使用/etc/init/mosquitto.conf

我确实更改了/etc/init/mosquitto.conf,但它似乎不起作用

$ sudo vim /etc/init/mosquitto.conf    
limit nofile 1048576 1048576
limit nproc  1048576 1048576
ulimit -n 1048576 # I do both command, but neither do they works
ulimit -u 1048576

有没有人知道让 mosquitto 支持大量连接?

谢谢

PS。测试工具:emqtt benchmark

【问题讨论】:

    标签: debian mqtt mosquitto pam ulimit


    【解决方案1】:

    经过大量研究,终于找到了一个解决方案:修改mosquitto的init脚本,将mosquitto用户改为root

    $ sudo vim /etc/mosquitto/mosquitto.conf
    
    # change user to root
    user root
    
    
    
    $ sudo vim /etc/init.d/mosquitto
    
    #! /bin/bash
    # Change /bin/sh to /bin/bash for fixing "ulimit -u illegal option" error
    
    set_ulimit () {
        ulimit -f unlimited
        ulimit -t unlimited
        ulimit -v unlimited
        ulimit -n 1048576
        ulimit -m unlimited
        ulimit -u 1048576
    }
    
    start)
        ...
        # Update ulimit config in start command
        set_ulimit
        ...
        ;;
      stop)
    

    修改配置后,重新加载systemctl配置并重启mosquitto

    sudo systemctl daemon-reload
    sudo service mosquitto stop
    sudo service mosquitto start
    

    那么限制就变了!

    【讨论】:

    • 没有理由以 root 身份运行 mosquitto,不鼓励这样做。
    • 嗨@ralight,感谢您的建议。您还有其他方法吗?
    • 以 root 身份运行对限制没有影响,它们是应用于流程的东西。您可以以 root 身份启动 mosquitto,但所有配置更改只是强制 mosquitto 在启动后继续以 root 身份运行。
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2019-12-10
    • 1970-01-01
    • 2015-08-26
    • 2010-09-29
    • 1970-01-01
    • 2012-06-14
    • 2019-06-03
    相关资源
    最近更新 更多