Mosquitto 增加最大连接数

Mosquitto increase max connections

我安装了 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的limit还是默认的

Max processes             7968                 7968      processes
Max open files            1024                 4096      files

发现mosquitto是nologin用户,无法触发PAM限制配置。如果我使用 prlimit 命令增加软打开文件限制,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

经过多方研究,终于找到了解决办法:修改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

然后更改限制!