对我的Node.js HTTPS服务器发出的POST或PUT请求大约有10%需要2分钟才能得到响应。其他90%的行为如预期。随机POST或PUT请求上的2分钟延迟
我已经通过tshark验证过请求的主体是否被服务器接收到,但是这需要2分钟来触发ServerRequest对象的'data'和'end'事件。
遇到此延迟的请求看起来是随机的,但是当它发生时,接收数据包与触发'数据'和'结束'事件之间的延迟时间总是恰好2分钟。
对于所有这些请求,我发布了一个到达单个数据包的小json对象。对于遇到延迟的请求,我知道我的应用程序收到了头文件,因为会话cookie是立即分析的。在会话认证之后,直到'数据'和'结束'事件终于在2分钟后发出,此时身体被解析并保存到我的数据库才会发生任何事情。
这是否更有可能成为我的Node应用程序的问题,或者是与我的服务器(运行Amazon Linux的EC2小型实例)有关的问题?它是如何从包含请求正文的数据包到达之前2分钟,直到它作为一个块传递给我的应用程序?
谢谢。
更新: 我修改了lib/http.js中的parser.onBody来记录'b',我可以看到这个方法直到两分钟延迟结束才被调用。这似乎表明问题比我的应用程序更低。我也更改了ec2实例,但这没有帮助。
这是一致的2分钟吗?对这些请求做了多少工作?任何与垃圾收集有关的机会? http://stackoverflow.com/questions/5603011/node-js-and-v8-garbage-collection – 2012-01-27 07:45:58
是的,每次只有两分钟。没有太多的工作 - 我附加一个解析的url,解析会话cookie并附加一个来自redis的会话对象。我从来没有看到任何延迟。我不认为它是垃圾收集,因为我可以继续接收其他的正常请求,而一个卡住。 – 2012-01-27 15:22:36