Mosquitto增加最大连接限制

时间:2016-12-12 07:34:50

标签: mqtt mosquitto

我正在尝试增加Mosquitto代理的最大打开文件连接。但我读到增加的并发连接不仅仅由Mosquitto控制。 根据我们的研究,我们决定使用100k并发连接,我们的目标是1.6 GB RAM。但是对于测试,我必须从默认的1024个连接增加到20000个 测试环境配置: T2。微型AWS服务器,带64 MB 14.04 ubuntu操作系统。更改mosquitto配置中的连接限制并未反映出来。可能是什么原因? 我们是否需要更改与AWS Server相关的任何配置?

我的配置:

我们的系统广泛连接是在/etc/sysctl.conf

上配置的
fs.file-max =99905

运行命令sysctl -pcat /proc/sys/fs/file-max反映了更改

/etc/security/limits.conf

ubuntu          hard     nofile         45000
ubuntu          soft     nofile         35000

Mosquitto安装在用户' Ubuntu'

我们还在/etc/pam.d/common-session

上添加了以下代码行
session required pam_limits.so

正在运行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) 7859
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 35000
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) 7859
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

/etc/init/mosquitto.conf

中的mosquitto的初始配置文件
description "Mosquitto MQTTv3.1 broker"
author "Roger Light <roger@atchoo.org"

start on net-device-up

respawn

exec /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
#limit nofile 4096 4096

limit nofile 24000  24000

以下是/etc/mosquitto/mosquitto.conf中的配置:

# change user to root
user ubuntu         

set_ulimit () {
    ulimit -f unlimited
    ulimit -t unlimited
    ulimit -v unlimited
    ulimit -n 24000
    ulimit -m unlimited
    ulimit -u 24000
}

start)
    ...
    # Update ulimit config in start command
    set_ulimit
    ...
    ;;
  stop)

但是运行cat /proc/4957/limits仍显示默认值1024个打开的文件:

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             7859                 7859                 processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7859                 7859                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

4957 - 是Mosquitto的进程ID

4 个答案:

答案 0 :(得分:5)

打开文件的数量受用户限制的限制,请参见ulimit手册页。 我将ulimit -n设置为20000,并运行mosquitto broker并显示

% ps ax | grep mosquitto 9497 pts/44 S+ 0:00 ./mosquitto -c mosquitto.conf 9505 pts/10 S+ 0:00 grep --color=auto mosquitto % cat /proc/9497/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 63084 63084 processes Max open files 20000 20000 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 63084 63084 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

无论如何,由于mosquitto是单线程的,我们还没有找到它 可用于任何超过约1000个发布商客户的 合理的有效载荷率为1/10秒。

答案 1 :(得分:2)

到目前为止,我已在代理上实现了74K并发连接。我已经通过编辑sysctl.conf和limit.conf文件配置了代理服务器的ulimit。

# vi /etc/sysctl.conf

fs.file-max = 10000000 
fs.nr_open = 10000000
net.ipv4.tcp_mem = 786432 1697152 1945728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.ip_local_port_range = 1000 65535

# vi /etc/security/limits.conf

* soft nofile 10000000
* hard nofile 10000000
root soft nofile 10000000
root hard nofile 10000000

重新启动系统后。

答案 2 :(得分:1)

如果您使用的是ubuntu 16.04,我们需要在system.conf中进行更改

# vim /etc/system/system.conf

DefaultLimitNOFILE=65536

重新启动,这会增加连接限制

答案 3 :(得分:1)

更改/etc/sysctl.conf或/etc/security/limits.conf中的限制似乎对作为服务启动的进程没有影响:必须在启动守护程序的文件中设置限制。

在/etc/init.d/mosquitto的开头: ulimit -n 20000#或者如果需要更多......

/etc/mosquitto/mosquitto.conf中的

: max_connections -1#或您想要的最大连接数