Simple nodejs http proxy fails with "too many open files"

Well, ignore it. I have opened an issue https://github.com/joyent/node/issues/793

Trying to run http://www.catonmat.net/http-proxy-in-nodejs

var http = require('http');

http.createServer(function(request, response) {
  var proxy = http.createClient(80, request.headers['host'])
  var proxy_request = proxy.request(request.method, request.url, request.headers);
  proxy_request.addListener('response', function (proxy_response) {
    proxy_response.addListener('data', function(chunk) {
      response.write(chunk, 'binary');
    });
    proxy_response.addListener('end', function() {
      response.end();
    });
    response.writeHead(proxy_response.statusCode, proxy_response.headers);
  });
  request.addListener('data', function(chunk) {
    proxy_request.write(chunk, 'binary');
  });
  request.addListener('end', function() {
    proxy_request.end();
  });
}).listen(8080);

Fails after a huge number of requests with:

net.js:695
        self.fd = socket(self.type);
                  ^
Error: EMFILE, Too many open files
    at net.js:695:19
    at dns.js:171:30
    at IOWatcher.callback (dns.js:53:15)

node 0.4.2 on OSX 10.6


You may be hitting your (default) maximum value of opened files in your operating system (for Linux it's 1024), especially if your are doing huge number of requests. For example in Linux you can increase this resource limit with ulimit command:

ulimit -n 8192

Resurrecting an old post here but I wanted to add my own answer for Ubuntu (couldn't get the ulimit command working :s ):

$ sudo vim  /etc/security/limits.conf

Add the following:

SOME_USER hard nofile SOME_NUMBER
SOME_USER soft nofile SOME_NUMBER

Replace SOME_USER with your user. Replace SOME_NUMBER with a number higher than the limit that is causing problems.

$ sudo vim /etc/pam.d/common-session

Add the following:

session required pam_limits.so

Reboot your machine and the problem should be fixed :).

链接地址: http://www.djcxy.com/p/46452.html

上一篇: 节点异常处理

下一篇: 简单的nodejs http代理失败,“打开的文件太多”