У меня есть служба MQTT (Mosquitto), работающая в контейнере docker для производственной площадки (размещена на AWS EC2). Причина запуска его в контейнере заключается в обеспечении переносимости, поскольку мы используем эту службу в нескольких местах.
Недавно мы наблюдали, что MQTT со временем начинает поглощать много ресурсов (ЦП и память) , в результате чего оказывается, что мы начинаем терять информацию, которая была передана через MQTT через QoS 1. Для решения этой проблемы были опробованы следующие подходы:
- Удалите файл сохранения, который Брокер MQTT использует
- Удалить полный том MQTT
- Перезапустите контейнер , Мы также пошли еще дальше, чтобы увеличить количество ресурсов, доступных для MQTT (ЦП и память EC2), но, как и в случае с вышеупомянутыми шагами, кажется, что мы просто решаем проблему, а не решаем ее.
Не могли бы вы предложить способы решения этой проблемы? Кроме того, было бы полезно, если бы кто-нибудь мог подсказать, как также профилировать MQTT-брокера, для использования кучи, тем, клиентов, отключений / подключений и т. Д. c.
В настоящее время мы используем следующий MQTT файл конфигурации:
# mount to /mosquitto/config/mosquitto.conf
# sys_interval 60
persistence true
persistence_location /mosquitto/data/
# This causes every change to trigger retained data save
autosave_interval 60
queue_qos0_messages true
store_clean_interval 20
max_queued_messages 100000
max_inflight_messages 10000
allow_anonymous false
password_file /etc/mosquitto/conf.d/passwd
acl_file /etc/mosquitto/conf.d/acl
connection_messages true
log_dest stdout
persistent_client_expiration 1h
Примечание. Клиенты, которые мы используем для подключения к MQTT-брокеру, записываются в NodeJS и Python. И для всех клиентов мы передаем опцию clean-session как true
.
Выполнение следующей команды на сервере Mosquitto: mosquitto --help
Полученный ответ:
mosquitto version 1.4.12 (build date 2017-06-01 13:03:46+0000)
mosquitto is an MQTT v3.1.1/v3.1 broker.