@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.


Reply via email to