Java 更新后MQTT/MongoDB应用程序性能损失
我更新了一个应用程序,该应用程序订阅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队列增长很快,因为处理速度不够快,这是我通常无法观
使用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队列中的条目越来越多。其中的作业将消息持久化到数据库中。我想问题一定在哪里。