Утечка памяти mosquitto

После обновления на последнюю доступную версию mosquitto стала утекать память. Никаких других изменений в конфигурации контроллера не было. После того, как mosquitto упирается в лимит, отключаются MQTT-клиенты, и всё перестаёт работать. После этого иногда mosquitto падает, перезагружается (с артефактами чтения неактуальных сохранённых значений топиков) и начинает сначала.

Возможно, это поведение описано в проблеме Wb-mqtt-serial утечка памяти .

В данном конкретном случае mosquitto подключен двунаправленным мостом к wqtt.ru, но ранее это проблем не вызывало.

Поднятие лимита по памяти до 500 оттягивает падение. Память съедается довольно равномерно, 500 хватает на 2-3 дня.

Package: mosquitto
Version: 2.0.20-1-wb102

$SYS/broker/heap/current 497466832
$SYS/broker/store/messages/count 3415
$SYS/broker/retained messages/count 3415
$SYS/broker/clients/total 22

Добрый день!

Возможно, это уже известная нам проблема — нужно убедиться, что это так. Пришлите, пожалуйста, диагностический архив.

Создание архива описано в документации.

Уточните, какое-то стороннее ПО установлено на контроллер?

Установлен Docker.

приложен диагностический архив, доступен только сотрудникам поддержки
(541,0 КБ)

Коллега, скорее, хочет узнать про ПО которое работает с брокером. Не особо важно где оно установлено - в контейнере или нативно.

Docker / HomeAssistant
Docker / NodeRED

Если временно отключить мост на wqtt.ru утечка сохраняется или память перестаёт расти?

HomeAssistant и NodeRED подключаются к локальному брокеру или тоже работают через мост?

Это поможет понять, связана ли проблема именно с двунаправленным мостом.

Отключение моста не повлияло на рост $SYS/broker/heap/current.

HomeAssistant и NodeRED подключены только к localhost. Ранее проблема не наблюдалась, контроллер работал в текущей конфигурации в течение года.

Коллеги подсказывают, что сейчас встречаются случаи, когда HomeAssistant нагружает так брокер. Прошу вас это подтвердить, остановив его.

В любом случае это похоже на имеющуюся проблему, по которой имеется багрепорт. Я буду держать вас в курсе, как появится новая информация.

Чтобы понять, что именно накапливается в брокере и как растёт память, снимите, пожалуйста, два среза на работающем контроллере.

  1. Выгрузите удержанные топики в файл:
mosquitto_sub -h localhost -t '#' -v --retained-only > /mnt/data/mqtt_dump.txt
  1. Посмотрите память процесса mosquitto — желательно несколько раз с интервалом (например, раз в час), чтобы была видна динамика роста:
ps -o pid,rss,vsz,etime,cmd -C mosquitto

Значение RSS здесь в килобайтах — это фактически занятая процессом память.

Файл дампа и вывод по памяти пришлите нам — по ним будет видно, растёт ли память вместе с накоплением конкретных топиков.

Добрый день! Ожидаю запрошенную информацию.

Отключение Home Assistant и NodeRED не повлияло на рост $SYS/broker/heap/current.

mqtt_data.zip (56,6 КБ)

Причина в следующем: некоторые клиенты переподключаются к брокеру каждый раз с новым случайным именем (Client ID). На вашем контроллере так ведёт себя штатная служба wb-cloud-agent-metrics — она переподключается примерно раз в две минуты, каждый раз под новым идентификатором. mosquitto удерживает в памяти состояние по каждому такому клиенту, и за счёт этого heap монотонно растёт, пока не упрётся в лимит, после чего брокер сбрасывает клиентов с ошибкой out of memory и перезапускается. Именно это вы и наблюдаете.
Это уже известная нам проблема, она заведена как баг и передана разработчикам. Отдельные действия с вашей стороны для диагностики больше не требуются — спасибо за подробные данные, они помогли подтвердить причину.
На время до выхода исправления можно оставить увеличенный лимит памяти в 30limits.conf как временную меру — на работу это не влияет, только откладывает перезапуск брокера.
Как только по исправлению появятся новости, сообщим в этой теме.

Я могу остановить wb-cloud-agent-* на время ожидания исправления?

Да, остановить можно. Утечку вызывает служба сбора метрик wb-cloud-agent-metrics — достаточно остановить её. Это остановит только отправку телеметрии в облако Wiren Board (графики в личном кабинете).

Обращаю внимание, если остановите все службыwb-cloud-agent-* , то удалённый доступ к контроллеру через wirenboard.cloud потеряете.

Подскажите также какую версию Home Assistant используете?

2026.7.1

Добрый день, разработчики закрыли задачу. Прошу обновиться через apt и проверить.

Обновился. Пока работает.