I tried your code with some modification
setInterval(function() {
for (var i = 0; i < 180; i++) {
readStream();
}
}, 300);
setInterval(function() {
garbageCollect();
getMem();
}, 500);
and while code is looping, Its memory usage increased to about 280Mb and
became stable.
I guess node reserves that space and not gc them.
2013년 6월 26일 수요일 오전 3시 42분 50초 UTC+9, alessioalex 님의 말:
>
> @Eldar: I know, but for the sake of brevity I omitted that.
>
> @mscdex: it has little to do with http, I made a simpler example with a
> loop here:
>
> https://gist.github.com/alessioalex/5861041 ( you can clone this )
>
> And then run node --expose-gc loop.js ( the garbage collector will run
> each 5 seconds )
>
> Note: I've included a sample.txt 2 Mb file.
>
> Also, I've tested on Node 0.8.x and 0.10.x and it behaves the same, after
> the gc runs the memory idles at > 100 Mb, which is really odd.
>
> This is the code from the gist:
>
> loop.js
>
> // run with: node --expose-gc loop.js
> var fs = require('fs');
>
> // 2 Mb file
> var fpath = __dirname + '/sample.txt';
>
> function readStream() {
> fs.createReadStream(fpath).on('open', function() {
> process.stdout.write('o');
> }).on('data', function() {
> process.stdout.write('*');
> }).on('end', function() {
> process.stdout.write('$');
> });
> }
>
> for (var i = 0; i < 180; i++) {
> readStream();
> }
>
> function getMem(msg) {
> memUsg = (process.memoryUsage().rss / (1024 * 1024)).toFixed(2);
> console.log('[' + new Date() + '] rss: ' + memUsg + ' Mb');
> }
>
> var garbageCollect = gc || function() {};
>
> setInterval(function() {
> garbageCollect();
> getMem();
> }, 5000);
>
>
> On Tuesday, June 25, 2013 4:39:56 PM UTC+3, alessioalex wrote:
>>
>> Hello there,
>>
>> I'm monitoring my app and I've seen my memory usage increase really oddly
>> (it did not decrease after X hours), so I suspected a leak. I've found out
>> that the memory seems to remain uncollected when using fs.readStream. I
>> made a small example with an http server that serving a 2mb file and did
>> some ab (apache benchmark) load testing on it (ab -n 5000 -c 100 a couple
>> of times). X minutes after the load testing is done, the memory idles at
>> 480 Mb and doesn't drop.
>>
>> Am I missing something or is there really a problem with this?
>>
>> index.js
>>
>> var http = require('http'),
>> bytes = require('bytes'), // npm install bytes
>> fs = require('fs');
>>
>>
>>
>> var fpath = '/path/to/a/2mb/file/in/my/case';
>>
>>
>> http.createServer(function(req, res) {
>>
>> fs.createReadStream(fpath).pipe(res);
>>
>> }).listen(7777);
>>
>>
>>
>> var lastMem;
>>
>>
>>
>> function getMem(msg) {
>>
>> var memUsg;
>>
>>
>>
>> msg = msg || '';
>>
>>
>>
>> memUsg = bytes(process.memoryUsage().rss);
>>
>> if (lastMem !== memUsg) {
>>
>> lastMem = memUsg;
>>
>> console.log(msg + ' ' + memUsg);
>>
>> }
>>
>> }
>>
>>
>>
>> setInterval(function() {
>>
>> getMem('rss:');
>>
>> }, 5000);
>>
>> Thanks!
>>
>
--
--
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.