当我用.stream()函数使用mongo tailable游标时,CPU过热

我正在尝试使用stream式可拖动游标。 我们正在使用mongoose,它的工作原理,但是当我用这个代码启动我的服务器:

const listStream = ListsSub.find() .tailable({ await_data: true, numberOfRetries: -1, }) .stream(); 

我的CPU过热。

Activity代码处于活动状态时的监视器

在这里输入图像描述

评论.stream()使服务器再次运行。

活动监视器,当代码在评论

在这里输入图像描述

没有它,我真的不知道该怎么办。 这是我的代码吗? 任何人都遇到同样的问题?

编辑:

  • mongoose:4.11.3
  • mongodb:3.4.6
  • 节点:8.1.2
  • 服务器和mongodb在同一台机器上

实际上这里有几件事要做。 第一个值得注意的事情是使用.cursor()方法,而不是.stream()正如实际上在使用时发出的弃用警告中所指示的那样:

DeprecationWarning:Mongoose:Query.prototype.stream()在mongoose> = 4.5.0中已弃用,请改用Query.prototype.cursor()

第二个值得注意的事情是,在.cursor()文档中指定,现在直接从底层驱动程序返回“包装stream”接口。 因此,build议使用现代的.addCursorFlag()选项,而不是使用.tailable() Query中的.tailable()方法。

一旦这两个措施都到位,我发现mongodnode进程的空闲CPU在更新间隔之间下降到0%

这是最好的模拟与下面的清单。

 const mongoose = require('mongoose'), Schema = mongoose.Schema; mongoose.Promise = global.Promise; mongoose.set('debug',true); const uri = 'mongodb://localhost/tailing', options = { useMongoClient: true }; const subSchema = new Schema({ name: String },{ capped: { size: 1024, max: 1000 } }); const Sub = mongoose.model('Sub', subSchema); function log(data) { console.log(JSON.stringify(data, undefined, 2)) } (async function() { try { const conn = await mongoose.connect(uri,options); //await Sub.remove({}); await Sub.insertMany(Array(50).fill(1).map((e,i) => ({ name: i+1 }))); let stream = Sub.find() .cursor() .addCursorFlag('tailable',true) .addCursorFlag('awaitData',true); /* .tailable({ await_data: true, numberOfRetries: -1 }) .cursor(); */ stream.on('data',function(data) { log(data); }); let counter = 50; setInterval(async function() { counter++; await Sub.insertMany({ name: counter }); },10000); } catch(e) { console.log(e); } finally { //mongoose.disconnect(); } })(); 

简单的旧的最高输出,作为一个实际的写入捕获发生:

 top - 21:38:29 up 12 days, 1:23, 3 users, load average: 0.06, 0.03, 0.04 Tasks: 116 total, 2 running, 114 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 98.6 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 2045968 total, 207452 free, 813908 used, 1024608 buff/cache KiB Swap: 2097148 total, 2097124 free, 24 used. 1028156 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1257 mongodb 20 0 1946896 487336 34892 S 0.7 23.8 130:37.67 mongod 28233 neillunn 20 0 1021460 41920 22996 S 0.3 2.0 0:00.67 node 30956 neillunn 20 0 101472 4384 3352 S 0.3 0.2 0:20.95 sshd