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.


Reply via email to