我有一个非常非常简单的Express.js应用程序,但是当它遇到大量的POST请求时,它会重置其中一些的连接。
以下是应用代码:
var http = require("http");
var express = require("express");
var BPromise = require("bluebird");
var app = express();
function my_route(req, res) {
var array = [];
for (var j = 0; j < 1000; ++j)
array.push(Math.random());
array.sort();
BPromise.resolve(true)
.then(function(){
res.send(true);
});
}
app.use("/", my_route);
var server = http.createServer(app);
server.listen(1390, function() {
console.log("Launched server.");
});
我让这个代码在一个非常普通的NGINX反向代理后面以集群模式(通过PM2)运行。 为了测试配置,我正在使用足够的POST来填充来自运行apache bench的单独服务器的CPU利用率:
ab -n 600000 -p body.json -c 32 [my public ip address]
在发送的600000个请求中,可能有1-4个回复非2xx响应。 Nginx日志有以下错误:
recv() failed (104: Connection reset by peer) while reading response header from upstream
Nginx提供的错误告诉我问题不在于Nginx,而在于Express,Node或Bluebird。我正在运行Node v8.9.4,Express v4.16.2,Bluebird v3.5.1和Nginx v1.13.8。
任何人都可以帮我弄清楚快递挂断电话的原因吗?谢谢你的帮助!