MQTT/MongoDB 更新后应用程序性能下降

MQTT/MongoDB application performance loss after update

我更新了订阅 MQTT 主题并将收到的消息保存在 MongoDB 数据库中的应用程序。
使用 paho Java MQTT 驱动程序Spring 数据 MongoDB.

应用程序是这样工作的:
当消息到达时,消息处理被移至单独的线程(使用 ThreadPoolExecutor)。因此到达的消息被确认得非常快,当系统处于暂时的重负载下时,我不需要因为 'inflight queue full' 错误而陷入丢失消息的麻烦。可能会发生但我通常没有观察到的情况是,ThreadPoolExecutor 队列增长迅速,因为它无法足够快地处理。

更新系统后,我观察到 - 特别是在启动之后,但不仅如此 - ThreadPoolExecutor 队列在增长。应用程序总是设法赶上处理速度,但有时队列会增长到几万个任务。这与每秒约 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

我怀疑库中的某些内容导致性能下降。 MongoDB Java 驱动程序中更改的 WriteConcern 之类的东西,如 here 所述(但这不是我的问题,因为我已经在我的 [=] 中使用了 mongo 驱动程序 3.4.3 35=] 8 构建应用程序)。我只是找不到它可以是什么。

如果您知道可能导致此行为的原因,请告诉我。我现在很茫然。

事实证明,将 paho java MQTT 客户端从版本 1.2.0 更新到 1.2.1(或 1.2.2)导致 CPU 使用量显着增加。

issue #754 是为此在 GitHub 问题跟踪器中创建的。