Mosquitto увеличивает максимальный лимит подключения
Я пытаюсь увеличить максимально открытое подключение файла брокера Mosquitto. Но я читал, что увеличение числа одновременных соединений контролируется не только Mosquitto. В соответствии с нашим исследованием мы решили использовать одновременное соединение 100 Кбайт, мы ориентируемся на 1,6 ГБ ОЗУ. Но для тестирования мне нужно увеличить с 1024 подключений по умолчанию до 20000 конфигураций среды тестирования: t2. Сервер micro AWS с 64 МБ 14,04 операционной системы Ubuntu. Изменение предела соединения в конфигурации москита не отражается. В чем может быть причина? Нужно ли менять конфигурацию, связанную с сервером AWS?
Мои конфигурации:
Наши общесистемные открытые соединения настроены на /etc/sysctl.conf
:
fs.file-max =99905
Выполнение команды sysctl -p
или же cat /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
Мой файл конфигурации init для комаров в /etc/init/mosquitto.conf
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
5 ответов
Количество открытых файлов ограничено пределами пользователя, см. Справочную страницу ulimit. Я установил ulimit -n на 20000, и запустил брокер москитов, и он показывает
% 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 секунд.
Изменение лимитов в /etc/sysctl.conf или /etc/security/limits.conf, по-видимому, не влияет на процесс, запускаемый как служба: ограничение должно быть установлено в файле, запускающем демон.
В начале /etc/init.d/mosquitto: ulimit -n 20000 # или больше, если нужно больше....
в /etc/mosquitto/mosquitto.conf: max_connections -1 # или максимальное количество соединений, которое вы хотите
Для меня ни одно из предоставленных решений не работало с Ubuntu 18.04. я должен был добавитьLimitNOFILE=10000
к/lib/systemd/system/mosquitto.service
подService
:
[Unit]
Description=Mosquitto MQTT Broker
Documentation=man:mosquitto.conf(5) man:mosquitto(8)
After=network.target
Wants=network.target
[Service]
LimitNOFILE=5000
Type=notify
NotifyAccess=main
ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto
ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto
ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto
ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto
[Install]
WantedBy=multi-user.target
Затем запуститеsystemctl daemon-reload
чтобы перезагрузить изменения и перезапустить комара с помощьюsystemctl restart mosquitto
.
До сих пор я достиг 74K одновременных подключений на брокере. Я настроил ulimit сервера-брокера, отредактировав файл sysctl.conf и limit.conf.
# 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
После этого перезагрузите вашу систему.
Если вы используете Ubuntu 16.04, нам нужно внести изменения в system.conf
# vim /etc/system/system.conf
DefaultLimitNOFILE=65536
Перезагрузитесь, это увеличит лимит соединения