带有Webflux +反应性Mongo驱动程序的com.mongodb.MongoWaitQueueFullException

时间:2019-04-09 13:10:17

标签: mongodb spring-webflux reactive-streams

我正在尝试使用加特林工具对一个简单的Spring webflux应用程序进行负载测试。应用程序是使用“ spring-boot-starter-webflux”和“ spring-boot-starter-data-mongodb-active”项目开发的。它只读取具有特定唯一列的mongo文档。我使用加特林setUp(scn.inject(atOnceUsers(userCount))。protocols(httpConf))注入并发用户

我启动如下所示的mongo数据库实例

副本

mongod --replSet rs0 --port 27020 --bind_ip localhost,somehostname,some_ip --dbpath C:\ mongo \ data \ db0 --smallfiles --oplogSize 128 mongod --replSet rs0 --port 27021 --bind_ip localhost,somehostname,some_ip --dbpath C:\ mongo \ data \ db1 --smallfiles --oplogSize 128 mongod --replSet rs0 --port 27022 --bind_ip localhost,somehostname,some_ip --dbpath C:\ mongo \ data \ db2 --smallfiles --oplogSize 128

独立

mongod --port 27018 --bind_ip localhost,somehostname,some_ip --dbpath C:\ mongo \ data \ db9 --smallfiles --oplogSize 128

设置1: Windows桌面上运行的应用程序(英特尔i5和16GB RAM),Windows笔记本电脑(英特尔i7处理器和16GB RAM)上运行的Mongo DB复制模式(3节点)以及台式机上的Gatling负载测试脚本。桌面上的应用程序脚本和Gatling脚本均已容器化。 默认情况下,队列大小为500,使用waitQueueMultiple覆盖了1000个队列大小

我正在获得这个com.mongodb.MongoWaitQueueFullException:本身具有3000并发性。

设置2: 我的设置与上述相同,但是Mongo DB在独立模式下运行

我正在获得这个com.mongodb.MongoWaitQueueFullException:本身具有3000并发性。

设置3:  应用程序,Mongo DB独立模式和Gatling负载测试脚本都在桌面上运行。所有这些都被集装箱化并通过桥接网络连接 默认情况下,队列大小为500,被1000队列大小覆盖 此设置可以正常工作,直到并发10000。我了解这里没有网络延迟的作用,因此性能更好

我有以下问题 1.除了增加队列大小之外,如何解决此异常。

  1. 为什么副本模式下的mongodb与独立模式下的性能不同。 如上所述,当并发〜3000个用户时,设置1和2引发异常。我会在一天中的随机时间重复这些测试。但是在某个时间点,mongo数据库性能的独立设置非常好,直到48000个并发用户应用程序可以很好地扩展(不引发异常)。我通过查看mongostat / mongotop来检查Mongo是否正在接收请求,并且还通过在每次测试之前和之后运行db.adminCommand(“ top”)来确认。我可以确认读取次数随着我用于测试的并发用户数的增加而增加。我唯一担心的是,如果我在副本模式(设置1)下使用mongo DB,它不会表现出更好的性能,它会继续在3000并发性上引发异常。为什么副本模式的性能不等于独立模式)应用程序代码相同,加特林脚本相同。

mongodb-driver-reactivestreams 1.9.2 Mondo DB 4.0.8

0 个答案:

没有答案