2011-03-16 80 views
3

好吧,忽略它。我已經打開了一個問題https://github.com/joyent/node/issues/793簡單的nodejs http代理失敗,「打開的文件太多」

試圖運行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); 

與請求數量巨大失敗後:

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) 

節點0.4.2在OSX 10.6

+0

你使用的是什麼版本的節點,從1.3開始有很多補丁(我認爲這個錯誤開始) – RobertPitt 2011-03-16 10:36:11

回答

8

您可能在您的操作系統中打開(默認)打開文件的最大值(對於Linux,它爲1024),特別是如果您的請求數量很大時。例如在Linux中,你可以增加此資源限制與ulimit命令:

ulimit -n 8192 
+1

什麼意思是'8192' – 2015-05-23 08:21:10

3

這裏復活舊的文章,但我想補充我自己的答案爲Ubuntu(不能得到ulimit命令工作:S):

$ sudo vim /etc/security/limits.conf 

添加以下內容:

SOME_USER hard nofile SOME_NUMBER 
SOME_USER soft nofile SOME_NUMBER 

替換爲您的用戶SOME_USER。將SOME_NUMBER替換爲高於導致問題的限制的數字。

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

添加以下內容:

session required pam_limits.so 

重新啓動計算機,問題應該是固定的:)。

相關問題