My processor overheats when I use the mango-tail cursor with .stream ()

I am trying to use a tail cursor with a stream. We use mongoose and it works, but when I start my server using this code:

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

my processor is overheating.

Activity monitoring when code is active

enter image description here

Commenting on .stream() , the server is working fine again.

Monitoring code comment activity

enter image description here

I do not know how to do without it. Is this something with my code? Has anyone had the same problem?

EDIT:

  • mongoose: 4.11.3
  • mongodb: 3.4.6
  • node: 8.1.2
  • Server and mongodb on the same computer
+5
source share
1 answer

There are actually a few things here. The first noteworthy .cursor() is to use .cursor() instead of .stream() , as indicated in the failure warning, which is issued when used differently:

DeprecationWarning: Mongoose: Query.prototype.stream () is deprecated in mongoose> = 4.5.0, use Query.prototype.cursor () instead

The second noteworthy thing is that, as stated in the .cursor() documentation, now this returns the wrapped stream interface directly from the main Driver. Therefore, it is recommended to use modern .addCursorFlag() instead of .tailable() from mongoose Query .

Once both of these measures are installed, I see that the idle processor for the mongod and node processes drops to 0% between update intervals.

It is best simulated with the following listing.

 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(); } })(); 

The usual old top pin, captured as the actual record, takes place:

 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 
+7
source

Source: https://habr.com/ru/post/1270577/


All Articles