Node.js 随机POST或PUT请求延迟2分钟

Node.js 随机POST或PUT请求延迟2分钟,node.js,amazon-ec2,Node.js,Amazon Ec2,我向Node.js HTTPS服务器发出的大约10%的POST或PUT请求需要2分钟才能得到响应。其余90%的表现与预期一致 我已经使用tshark验证了服务器是否接收到请求主体,但是触发ServerRequest对象的“data”和“end”事件需要2分钟 经历此延迟的请求似乎是随机的,但当它确实发生时,从接收数据包到触发“数据”和“结束”事件之间的延迟时间总是正好为2分钟 对于所有这些请求,我发布了一个小的json对象,它以单个数据包的形式到达。对于遇到延迟的请求,我知道我的应用程序会收到头

我向Node.js HTTPS服务器发出的大约10%的POST或PUT请求需要2分钟才能得到响应。其余90%的表现与预期一致

我已经使用tshark验证了服务器是否接收到请求主体,但是触发ServerRequest对象的“data”和“end”事件需要2分钟

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

对于所有这些请求,我发布了一个小的json对象,它以单个数据包的形式到达。对于遇到延迟的请求,我知道我的应用程序会收到头,因为会立即解析会话cookie。在会话身份验证之后,在2分钟后最终发出“data”和“end”事件之前,不会发生任何事情,此时将解析正文并将其保存到我的数据库中

这更可能是我的节点应用程序的问题,还是我的服务器(运行AmazonLinux的EC2小实例)的问题?从包含请求主体的数据包到达,直到它作为一个数据块传递到我的应用程序,怎么需要2分钟

谢谢

更新:
我将lib/http.js中的parser.onBody修改为日志“b”,我可以看到直到两分钟延迟结束时才调用此方法。这似乎表明问题的级别低于我的应用程序。我还更改了ec2实例,但这没有帮助。

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


话虽如此,EC2的小例子可能非常喜怒无常。它们与其他客户共享的频率很高,因此有时它们会变得异常迟钝。了解这一点的一种方法是在EC2实例的命令行中运行“top”。查找列%st,它是steal。如果高,那就糟糕了,切换到新的EC2实例。(或获取一个更大的)

我只是在验证后才监听“数据”事件。我有
req.on('data',函数(chunk){req.body+=chunk})是否持续2分钟?在这些请求上做了多少工作?有没有可能和垃圾收集有关?是的,每次正好两分钟。没有太多工作-我附加了一个解析过的url,解析了会话cookie,并从redis附加了一个会话对象。我从来没有见过这样的延误。我不认为这是垃圾收集,因为当一个post请求被卡住时,我可以继续正常地接收其他post请求。