Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新后MQTT/MongoDB应用程序性能损失_Java_Mongodb_Mqtt_Spring Data Mongodb_Paho - Fatal编程技术网

Java 更新后MQTT/MongoDB应用程序性能损失

Java 更新后MQTT/MongoDB应用程序性能损失,java,mongodb,mqtt,spring-data-mongodb,paho,Java,Mongodb,Mqtt,Spring Data Mongodb,Paho,我更新了一个应用程序,该应用程序订阅MQTT主题并将收到的消息持久保存在MongoDB数据库中。 使用PAHOJavaMQTT驱动程序和SpringDataMongoDB 应用程序的工作原理如下: 当消息到达时,消息处理将移动到单独的线程(使用ThreadPoolExecutor)。因此,到达的消息被确认得非常快,当系统处于临时重载状态时,我不需要因为“机上队列已满”错误而遇到丢弃消息的问题。可能发生的情况是,ThreadPoolExecutor队列增长很快,因为处理速度不够快,这是我通常无法观

我更新了一个应用程序,该应用程序订阅MQTT主题并将收到的消息持久保存在MongoDB数据库中。
使用PAHOJavaMQTT驱动程序和SpringDataMongoDB

应用程序的工作原理如下:
当消息到达时,消息处理将移动到单独的线程(使用ThreadPoolExecutor)。因此,到达的消息被确认得非常快,当系统处于临时重载状态时,我不需要因为“机上队列已满”错误而遇到丢弃消息的问题。可能发生的情况是,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(但这不是我的问题,因为我已经在Java 8构建应用程序中使用了mongo驱动程序3.4.3)。我就是找不到它是什么


如果你知道是什么导致了这种行为,请告诉我。现在我不知所措。

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


在GitHub问题跟踪器中为此创建了。事实证明,paho java MQTT客户机从1.2.0版更新到1.2.1版(或1.2.2版)导致CPU使用量显著增加


是在GitHub问题跟踪程序中为此创建的。

只是为了澄清,您描述的问题不会出现在Java 8的更新依赖项中,对吗?您是否手动指定要使用的GC算法?在Java11中,默认值已从并行更改为G1。尝试将GC更改为ParralElgc-我尝试更改GC,但观察结果没有更改。问题发生在更新后的应用程序上,我(或多或少)将每个依赖项更新到了一个新的(~当前)版本(因为主要的spring启动更新)。奇怪的是,认为Java 8应用程序版本(具有旧的依赖项)在Java 11上运行良好。-随着Framework和dependencies的更新,我发现ThreadPoolExecutor队列中的条目越来越多。其中的作业将消息持久化到数据库中。我想问题一定在某个地方。我只是想澄清一下,您描述的问题不会发生在Java 8上更新的依赖项上,对吗?您是否手动指定要使用的GC算法?在Java11中,默认值已从并行更改为G1。尝试将GC更改为ParralElgc-我尝试更改GC,但观察结果没有更改。问题发生在更新后的应用程序上,我(或多或少)将每个依赖项更新到了一个新的(~当前)版本(因为主要的spring启动更新)。奇怪的是,认为Java 8应用程序版本(具有旧的依赖项)在Java 11上运行良好。-随着Framework和dependencies的更新,我发现ThreadPoolExecutor队列中的条目越来越多。其中的作业将消息持久化到数据库中。我想问题一定在哪里。