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

Перезагрузитесь, это увеличит лимит соединения

Другие вопросы по тегам