在高负载服务器上进行测试,每秒处理大约500-600个请求。经过几个小时的调试,我最终只使用了一个简单的HTTP服务器。nodejs HTTP服务器无法在高负载下处理大量响应
我注意到,当响应主体是更大的话,可以说,60K,我得到这个错误:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.EventEmitter.addListener (events.js:160:15)
at Socket.Readable.on (_stream_readable.js:679:33)
at Socket.EventEmitter.once (events.js:179:8)
at TCP.onread (net.js:527:26)
,之后的CPU去像疯了似的
但是,具有完全相同的代码,当响应设置为10K的文本时,一切正常。 很奇怪...
有没有人遇到过这个? 请求帮助。
这是一个完整的脚本:
var
cluster = require('cluster'),
numCPUs = require('os').cpus().length;
if(cluster.isMaster){
for (var i = 0; i < numCPUs; i++) cluster.fork();
cluster.on("exit", function(worker, code, signal) {
cluster.fork();
});
}
else{
var http = require('http');
var app = function(req, res){
res.writeHead(200, {'Content-Type': 'text/html', 'Access-Control-Allow-Origin': '*'});
res.end(60k_of_text___or___10k_of_text);
};
http.createServer(app).listen(80);
}
我无法重现:'./wrk -c 40 http:// localhost:8085 /' - >'113603请求在10.00s,6.95GB读取,Transfer /秒:711.95MB,延迟时间3.85ms 4.81ms 53.97ms,带有64k响应。节点0.8.22和主站(v0.11.0-pre)给出的数字大致相同 –
文本是静态的,还是为每个请求生成文本。 – user568109
user568109 - 在原始脚本中,为每个请求生成文本,但是最后只是一个静态文本,仍然存在问题。 Andrey Sidorov - 这听起来像个好消息,我要在另一台服务器上测试它,也许它是通过某种方式连接到这台特定的机器,但我有疑问。 tnx – jsbuster