It looks that the more memory is taken by the process, the more performance
of CPU intensive tasks drops. I've discovered that seeing really bad
performance of parsing body post request by my app server. It takes 30s
with my v0.10 Node server, but when I put same body content to parse in
simple plain script it takes around 60ms.
To look at it closer I prepared a simple CPU intensive function, that
resembled bottleneck operation on my side:
var qs = require('querystring');
var data = "...130k long POST request body ...";
module.exports = function parseTest() {
console.log(process.memoryUsage());
qs.parse(data);
};
See this simplified log from my app (running v0.10.8 on OSX, but I can
confirm similar behavior on Ubuntu box)
.. Process start ..
Memory usage: { rss: 29274112, heapTotal: 26003712, heapUsed: 9881912 }
Parse test: 74ms
... Load schemas ...
Memory usage: { rss: 133754880, heapTotal: 119911424, heapUsed: 88224088 }
Parse test: 967ms
... Load (other) schemas ...
Memory usage: { rss: 438939648, heapTotal: 412051624, heapUsed: 388808776 }
Parse test: 8127ms
... Populate database ... .
Memory usage: { rss: 573509632, heapTotal: 543040880, heapUsed: 516926304 }
Parse test: 24704ms
... Start server ...
Memory usage: { rss: 485855232, heapTotal: 458623864, heapUsed: 416212096 }
Parse test: 26004ms
Then at any point I send similar POST request, it takes around 30s for
server process to parse it, that's really bad.
I've checked v0.8.23 and it's affected same way, but I was very happy to
find that v0.11.2 doesn't have that issue.
Log when running same app on same machine but with v0.11.2:
.. Process start ..
Memory usage: { rss: 28647424, heapTotal: 25991680, heapUsed: 9322968 }
Parse test: 8ms
... Load schemas ...
Memory usage: { rss: 127152128, heapTotal: 112784128, heapUsed: 53569168 }
Parse test: 5ms
... Load (other) schemas ...
Memory usage: { rss: 531435520, heapTotal: 501778432, heapUsed: 430137928 }
Parse test: 5ms
... Populate database ... .
Memory usage: { rss: 716591104, heapTotal: 682931712, heapUsed: 448264624 }
Parse test: 3ms
... Start server ...
Memory usage: { rss: 716627968, heapTotal: 682931712, heapUsed: 449970104 }
Parse test: 2ms
That makes huge difference, and makes possible to have performant app on a
server.
Both v0.10 and v0.11 use exactly same querystring, so it can't be the case
that querystring became more performant.
My question is, are you (Node.js maintainers) aware of such issue? Do you
know what's the cause? Is it in V8 or rather some Node.js layer?
Is there a plan to fix it for v0.10 or it will stay with v0.10, but will
be fixed with stable. v0.12 release?
Thanks!
Mariusz Nowak
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.