【问题标题】:Heroku auto restart dyno on H12 Request timeout errorsH12请求超时错误上的Heroku自动重启测功机
【发布时间】:2017-07-16 14:59:41
【问题描述】:

我们有一个节点测功机处理小型 API 请求,大约 10/秒。所有请求在 0.5 秒内完成

每隔几天,dyno 就会开始对所有请求给出 H12 请求超时错误。我们找不到原因。重启就解决了。

如何让 Heroku 在 H12 请求超时阈值时自动重启测功机,例如超过 5/秒?

【问题讨论】:

  • 嘿@Marius Andreiana,你找到什么了吗?我面临同样的问题。我有适用于 iOS 应用程序的 nodejs 后端 API,它停止工作,因为它给出了超时错误。怎么办?
  • @Marius Andreiana 你找出原因和解决方法了吗?每天在我们的服务器上发生一次或两次。请指教
  • 没有人,对不起,但如果你不赞成这个问题,它就不会得到任何关注

标签: node.js heroku


【解决方案1】:

H12 请求超时意味着 Heroku 的负载均衡器正在向您的应用发送请求但没有收到响应。

发生这种情况的原因有很多,因为应用程序已经在运行,您可以排除配置问题。所以现在您正在查看应用程序代码,并且必须检查日志以了解发生了什么。我建议使用他们的日志记录应用程序之一,例如 papertrail,这样您就可以在发生这种情况时了解日志的历史记录。

可能是,但不限于:

  • 应用程序崩溃且未重新启动
  • 应用程序生成错误,但未发送响应
  • 应用程序卡在阻止新请求的事件循环中

Heroku 提供了一些有关该问题的文档,可能有助于调试您的情况

https://devcenter.heroku.com/articles/request-timeout https://help.heroku.com/AXOSFIXN/why-am-i-getting-h12-request-timeout-errors-in-nodejs

【讨论】:

    【解决方案2】:

    正如 ryan 所说,H12 请求超时意味着 Heroku 的负载均衡器正在向您的应用发送请求,但没有及时得到响应(heroku 的最大响应时间为 30 秒)。有时,请求的计算量很大,或者效率低下的数据库查询会延迟响应。

    但问题的根源并不一定意味着您的应用程序错误。

    在我们的例子中,我们有多个 web dynos 并行处理请求。有时,其中一个测功机会产生 H12(超时),而所有其他测功机都运行完美。所以我们可以完全排除所有应用问题。重新启动受影响的测功机很有帮助,因为您的应用程序在重新启动时会落在不同的物理服务器上(至少很有可能)。

    所以 Heroku 在他们的轮换中有“坏服务器”!有时您的代码会落在其中一台糟糕的服务器上。我不能说一个人是否有“吵闹的邻居”问题。我还问 Heroku 如何防止这种情况发生,我得到的唯一回应是为专用的性能测功机付费,这令人非常不满意......

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 1970-01-01
      • 2012-07-08
      • 2020-01-26
      • 2020-07-09
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多