Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Mongodb NestJS Mongoose连接模具负载测试_Mongodb_Mongoose_Nestjs - Fatal编程技术网

Mongodb NestJS Mongoose连接模具负载测试

Mongodb NestJS Mongoose连接模具负载测试,mongodb,mongoose,nestjs,Mongodb,Mongoose,Nestjs,当多个开发人员使用我的API时,会向Mongoose发送多个并发请求。 当并发性很高时,连接就“死”了,并且拒绝满足任何新请求,无论我等待多长时间(几个小时!) 我只想声明,正常使用时一切正常。过度使用会导致连接崩溃 我的MongooseModule初始化: MongooseModule.forRoot(DatabasesService.MONGO_FULL_URL{ useNewUrlParser:true, useUnifiedTopology:正确, UseFindModify:false

当多个开发人员使用我的API时,会向Mongoose发送多个并发请求。 当并发性很高时,连接就“死”了,并且拒绝满足任何新请求,无论我等待多长时间(几个小时!)

我只想声明,正常使用时一切正常。过度使用会导致连接崩溃

我的MongooseModule初始化:

MongooseModule.forRoot(DatabasesService.MONGO_FULL_URL{
useNewUrlParser:true,
useUnifiedTopology:正确,
UseFindModify:false,
自动加密:{
keyVaultNamespace:DatabaseService.keyVaultNamespace,
kmsProviders:DatabasesService.kmsProviders,
额外选择:{
mongocryptdSpawnArgs:['--pidfilepath','/tmp/mongocryptd.pid']
}
}一样
})
导入功能的模块:

@模块({
导入:[MongooseModule.forFeature([{name:'modelName',schema:ModelNameSchema}]),
提供者:[ModelNameService],
控制器:[……],
出口:[……]
})
服务:

@Injectable()
导出类ModelNameService{
建造师(
@InjectModel('modelName')私有modelName:Model
) {}
异步findAll():承诺{
const result:IModelName[]=等待此.modelName.find().exec();
如果(!result)抛出新的BadRequestException(`No result was found.`);
返回结果;
}
}
我尝试过使用不同的UTIL进行负载测试,最简单的是:

ab-c200-n300-H“授权:持票人$TOKEN”-m GET-b0https://example.com/getModelName
连接挂起后的任何新请求都会卡在ModelNameService.findAll()的第一行(对mongo的请求)

在详细程度为“-vvv”的mongodb日志上,我可以看到一些可疑的行:

User Assertion: Unauthorized: command endSessions requires authentication src/mongo/db/commands.cpp

Cancelling outstanding I/O operations on connection to 127.0.0.1:33134
我还发现,它不会同时超过12个打开的连接。它总是等待关闭一个,然后再打开一个新的

其他要点:

  • Mongoose不会返回任何值或通知任何错误。它只是挂起,没有通知任何事情
  • 终端健康检查能够ping数据库并返回健康状态
  • NestJSAPI仍然有效——我能够发送新请求并接收响应。只有与错误连接相关的请求才会挂起
  • 当我注入连接并检查其
    readyState
    时,它返回
    connected
  • 重新启动API会立即修复它
  • MongoDB本身保持正常工作
  • 增加Mongoose
    poolSize
    可以同时处理更多请求,但仍会在大量请求时崩溃

我这里的主要问题是我如何处理这个案子?目前,我添加了另一个运行状况检查,尝试每半分钟向有问题的连接发送一个查询,如果k8s确定出现故障,它将重新启动pod。这是可行的,但不是最优的。

同样的问题,有什么建议吗?@GoonNguyen不幸的是,我们只是通过增加
poolSize
值和旋转更多API实例来解决这个问题。