2016-10-23 4 views
0

установить mosquitto, и изменили много установки в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 в

Тогда я нашел предел этого mosquitto по-прежнему по умолчанию

Max processes    7968     7968  processes 
Max open files   1024     4096  files 

Я выяснял mosquitto это NOLOGIN пользователя и не может вызвать конфигурацию предела PAM , И если я использую команду prlimit для увеличения мягкого предела открытого файла, москит действительно может увеличить максимальные соединения, но ограничен жестким пределом (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 поддержкой большого количества соединений?

Thanks

PS. инструмент для тестирования: emqtt benchmark

ответ

0

После большого исследования, я, наконец, получил решение: изменить инициализации сценарий mosquitto и изменить пользователя mosquitto укоренить

$ 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 

Затем пределы изменены!

+1

Нет причин запускать москит как корень, и его следует обескуражить. – ralight

+0

Привет, спасибо, спасибо за советы. У вас есть другой способ сделать это? – Asoul

+0

Запуск от имени root не имеет никакого отношения к ограничениям, они что-то применяются к процессу. Вы можете * запустить * mosquitto в качестве пользователя root, но все изменения в конфигурации - это заставить mosquitto продолжать работать как root после его запуска. – ralight