Raising ulimit smells like a bad solution, doesn't it?

I'd suggest to use https://github.com/isaacs/node-graceful-fs instead. Why 
isn't something like that included in the core by the way? Issue seems to be 
quite common.

... or write a wrapper to readFile to explicitly limit an amount of open 
files...

On the other hand, I might be missing a point here. Why is this limit of 1024 
opened files enforced by default in the first place?

-- 
// alex


29.04.2013, 18:38, "Ben Noordhuis" <[email protected]>:
> On Mon, Apr 29, 2013 at 4:13 PM, Afshin Mehrabani <[email protected]> 
> wrote:
>
>>  Today when I tried to implement an example of using async/sync I/O methods
>>  in NodeJs, I faced an strange problem. When I'm trying to send requests with
>>  ab, I get this error in Async method:
>>>  { [Error: EMFILE, open 'sample.txt'] errno: 20, code: 'EMFILE', path:
>>>  'sample.txt' }
>>  But the same functionality in Sync mode works well, without any errors.
>>
>>  This is my ab command for running the test: ab -n 10000 -c 1000 -vhr
>>  http://localhost:8080/
>>
>>  Here is my both codes:
>>
>>  Async:
>>>  http.createServer(function (req, res) {
>>>    fs.readFile('sample.txt', function (err, data) {
>>>      if(err) {
>>>        res.writeHead(500, {'Content-Type': 'text/plain'});
>>>        res.end();
>>>        console.log(err);
>>>      } else {
>>>        res.writeHead(200, {'Content-Type': 'text/plain'});
>>>        res.end(data);
>>>      }
>>>    });
>>>  }).listen(8080, '127.0.0.1');
>>  Sync:
>>>  http.createServer(function (req, res) {
>>>    var fileOutput = fs.readFileSync('sample.txt').toString();
>>>    if(!fileOutput) {
>>>        res.writeHead(500, {'Content-Type': 'text/plain'});
>>>        res.end('Error in reading the file.');
>>>    } else {
>>>      res.writeHead(200, {'Content-Type': 'text/plain'});
>>>          res.end(fileOutput);
>>>    }
>>>  }).listen(8081, '127.0.0.1');
>>  What's the matter? Is there any problem in using Async methods?
>
> There is in the way you use them.
>
> The synchronous version is effectively serial, i.e. it processes
> requests one by one (IOW, there is only one file descriptor at any
> point in time that refers to sample.txt) and that's why you don't hit
> the open file descriptor limit.  It also means that fs.readFileSync()
> is now the single largest bottleneck in your application.
>
> The asynchronous version runs concurrently, meaning there are 1,000
> file descriptors - or however many simultaneous connections you're
> serving - referring to sample.txt.  Raise `ulimit -n` and the problem
> goes away (or cache the contents of sample.txt, of course.)
>
> --
> --
> 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.

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