Потеря производительности приложения MQTT / MongoDB после обновления - PullRequest
1 голос
/ 14 февраля 2020

Я обновил приложение, которое подписывается на темы MQTT и сохраняет полученные сообщения в базе данных MongoDB.
Использует драйвер paho Java MQTT и Spring Data MongoDB .

Приложение работает следующим образом:
Когда приходит сообщение, обработка сообщения перемещается в отдельный поток (используя ThreadPoolExecutor). Таким образом, поступившие сообщения подтверждаются очень быстро, что не должно вызывать проблем с пропущенными сообщениями из-за ошибок «переполнение очереди в полете», когда система временно загружена. Что может случиться, но что я обычно не наблюдаю, так это то, что очередь ThreadPoolExecutor быстро растет, потому что она не может быть обработана достаточно быстро.

После обновления системы я наблюдаю это - особенно после запуска, но не только - очередь ThreadPoolExecutor увеличивается. Приложению всегда удается догнать обработку, но всегда бывают случаи, когда очередь увеличивается до нескольких 10 тысяч задач. И это при постоянно одинаковой загрузке около 700 сообщений в секунду (из-за тестирования).

До сих пор я тестировал:

Java  8 and App build with Java 8  -> works great
Java 11 and App build with Java 8  -> works great (some Illegal reflective access warnings of course)
Java 11 and App build with Java 11 -> makes some problems

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

spring-boot-starter-data-mongodb         1.15.12.RELEASE -> 2.2.4.RELEASE
  spring-data-mongodb                    1.10.11.RELEASE -> 2.2.4.RELEASE
  mongodb-driver                                          3.4.3 -> 3.11.2

org.eclipse.paho.client.mqttv3                              1.2.0 -> 1.2.2

MongoDB Server Version is 3.4.24

Я подозреваю, что что-то в библиотеках вызывает снижение производительности. Что-то вроде измененного WriteConcern в драйвере MongoDB Java, как описано здесь (но это не моя проблема, потому что я уже использую драйвер mon go 3.4.3 в своем приложении Java 8 для сборки) , Я просто не могу найти, что это может быть.

Если вы знаете, что может быть причиной такого поведения, пожалуйста, дайте мне знать. Сейчас я в растерянности.

1 Ответ

0 голосов
/ 20 февраля 2020

Оказалось, что обновление MQTT-клиента paho java с версии 1.2.0 до 1.2.1 (или также 1.2.2) привело к значительному увеличению загрузки ЦП.

для этого была создана проблема # 754 в системе отслеживания проблем GitHub.

...