【问题标题】:When does heroku app start working after an H12 error?Heroku 应用程序在 H12 错误后何时开始工作?
【发布时间】:2019-09-25 18:32:05
【问题描述】:

当我在 Rails 应用程序上遇到 H12 错误时,如果我 heroku restart 它会立即备份并运行。

如果没有heroku restart,应用何时(如果有的话)重新开始工作? (例如,heroku 应用程序是否会定期自动重启,或者内存是否会定期清除,或者其他什么?)

【问题讨论】:

    标签: heroku


    【解决方案1】:

    H12 错误意味着请求的处理时间超过 30 秒。这不一定是内存问题的迹象。

    您的 ruby​​ 应用只能同时处理有限数量的请求。这是线程数 * 您的 Web 服务器(独角兽或美洲狮)正在启动的进程数。

    当您有长时间运行的请求时,例如,由于文件上传、调用底层 API 或慢速 SQL 查询,该请求会占用这些有限槽之一。 如果你有太多这些,任何新的传入请求都必须等到一个可用的插槽。

    当 Heroku 终止一个耗时超过 30 秒的 HTTP 请求时,它无法告诉您的应用程序是否需要取消该请求。 因此,如果您有一个很长的请求队列,您最终可能会处于这样一种状态,即所有请求甚至在应用开始处理它们之前都以 H12 结束。

    重新启动应用程序会修复它,因为它会清除请求队列。

    解决此问题的最佳方法是使用像 rack-timeout 这样的 gem,它将杀死任何花费超过您设置的时间的请求。 一个合理的值是大约 1 或 2 秒。

    请参阅 Heroku 开发中心的超时文档:https://devcenter.heroku.com/articles/request-timeout

    请注意,如果您有长时间运行的 SQL 查询,您的数据库也会出现同样的问题。 因此,为 SQL 查询设置语句超时也是一件好事:https://devcenter.heroku.com/articles/heroku-postgres-database-tuning#identify-and-fix-expensive-queries

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2019-12-15
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2013-04-07
      相关资源
      最近更新 更多