随机POST或PUT请求的2分钟延迟

时间:2012-01-26 23:30:26

标签: node.js amazon-ec2

我向Node.js HTTPS服务器发出的POST或PUT请求中约有10%需要2分钟才能得到响应。其他90%的行为符合预期。

我已经通过tshark验证了服务器收到了请求的正文,但是需要2分钟才能触发ServerRequest对象的'data'和'end'事件。

遇到此延迟的请求似乎是随机的,但是当它确实发生时,接收数据包与触发的“数据”和“结束”事件之间的延迟时间总是正好是2分钟。

对于所有这些请求,我发布了一个小的json对象,它到达了一个数据包。对于遇到延迟的请求,我知道我的应用程序收到了标头,因为会话cookie被立即解析。在会话身份验证之后,在2分钟后最终发出'data'和'end'事件,然后解析主体并将其保存到我的数据库之前,没有任何事情发生。

这更可能是我的Node应用程序的问题,还是我的服务器问题,这是运行Amazon Linux的EC2小实例?从请求正文的数据包到达之前的2分钟到它作为一个块传递给我的应用程序是怎么回事?

感谢。

更新: 我修改了lib / http.js中的parser.onBody来记录'b',我可以看到在两分钟延迟结束之前没有调用此方法。这似乎表明问题的程度低于我的应用程序。我也改变了ec2实例,但这没有帮助。

2 个答案:

答案 0 :(得分:3)

如果不知道节点应用程序对每个请求的确切操作,很难说。例如,如果它必须与另一个后端服务进行通信,则与仅使用ram中的缓存提供图像有很大的不同。

话虽如此,EC2的小例子可能非常有气质。他们与其他客户分享很多,所以有时候他们可能会变得非常反应迟钝。了解这一点的一种方法是在EC2实例的命令行中运行“top”。查找%st的列,这是偷的。如果高,那很糟糕,切换到新的EC2实例。 (或者更大一点)

答案 1 :(得分:1)

我只是在验证后才收听'数据'事件。我在验证后的回调中有req.on('data', function(chunk) {req.body += chunk});,而不是在主侦听器函数中。有效载荷通常在我开始收听之前就已到达。