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

标签 node.js amazon-ec2

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

我已经用 tshark 验证服务器收到了请求的主体,但是需要 2 分钟才能触发 ServerRequest 对象的“数据”和“结束”事件。

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

对于所有这些请求,我将发布一个小的 json 对象,该对象在单个数据包中到达。对于遇到延迟的请求,我知道我的应用程序收到了 header ,因为会立即解析 session cookie。 session 身份验证后,直到 2 分钟后最终发出“数据”和“结束”事件,才会发生任何事情,此时正文被解析并保存到我的数据库中。

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

谢谢。

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

最佳答案

如果不知道 Node 应用程序对每个请求做了什么,就很难说。例如,如果它必须与另一个后端服务通信,这与仅从 ram 中的缓存中提供图像有很大不同。

话虽如此,EC2 小型实例可能非常喜怒无常。它们与其他客户大量共享,因此有时他们会变得奇怪地 react 迟钝。感受这一点的一种方法是在 EC2 实例的命令行中运行“top”。查找列 %st,这是窃取。如果高,那就不好了,切换到新的 EC2 实例。 (或者买大一点的)

关于node.js - 随机 POST 或 PUT 请求延迟 2 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027050/

相关文章:

Hadoop 包 : how to specify a region? 中的 hadoop-ec2

node.js/Youtube API/上传

javascript - ESLint导入排序分组

amazon-ec2 - IPv6 地址到 CIDR block

ruby-on-rails - 访问 GitHub 私有(private)仓库时部署到 ec2 实例失败

amazon-web-services - CDK 客户端 VPN 端点。想了解如何获取创建的 VpnEndpoint 的 DnsName

javascript - 如何加载 Node 模块,就好像当前模块位于其他地方一样?

javascript - CircleCi 有时无法在构建中连接到 Postgres

javascript - webdriverio 无法在浏览器中加载页面

php - Mysql服务器已经消失: not running any big scripts