我们在Linux上使用nginx的ubuntu进行负载均衡,ssl终止等一些function。 在后端我们发送stream量到Windows Server 2012 R2 IIS Web服务器。 我们的服务器运行在vmware esxi 6.0U2上,我们得到了很多IIS坏的网关504错误,而我们的网站得到用户超时错误,所以我们试图find问题,通过检查防火墙,2(堆叠)cisco switch 2960,和其他东西。 没有防火墙,我们正在写一个nodejs应用程序来发送tcp数据包,所以我们发送了10000个tcp连接,这个结果之间:
Windows-> Windows =确定,
Linux的Ubuntu – > Linux的Ubuntu的=好的,
Windows – > Linux =好的,
Linux – > Windows =我们得到了ECONNREFUSED和ETIMEDOUT和ECONNRESET错误,也OK
我们在VMWare和linux环境中改变了LRO和GRO,但是问题仍然没有解决。 这里是我们的nodejs代码发送:
这是服务器端:
var http = require('http');
var port = process.argv [2];
var counter = 0;
var server = http.createServer(function(request,response){
计数器++;
console.log(`服务$ {counter}`);
response.writeHead(200,{“Content-Type”:“text / plain”});
response.end(“Hello World \ n”);
});
server.listen(端口);
console.log(`运行在端口$ {port}`的服务器);
这是客户端:
var http = require('http'); var address = process.argv[2]; var host = address.split(':')[0]; var port = address.split(':')[1] || 80; var count = process.argv[3]; var options = { hostname: host, port: port, path: '/', method: 'GET' }; var results = {}; var r = 0; function printResults() { for (var key in results) console.log( ${results[key]}: ${key} ) } for (var i = 0; i < count; i++) { var req = http.request(options, function(res) { var key = "OK"; results[key] = (results[key] || 0) + 1;
if (r++ === count - 1) printResults();
}); req.on('error',function(error){var key = error.toString(); results [key] =(results [key] || 0)+ 1;
if (r++ === count - 1) printResults();
}); req.end(); }