我们有一个节点dyno处理小的API请求,~10 /秒。所有请求均在0.5秒内完成
每隔几天,dyno开始在所有请求上发出H12请求超时错误。我们无法找到原因。重新启动修复它。
如何让Heroku在H12请求超时阈值上自动重启dyno,例如:超过5 /秒?
答案 0 :(得分: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
答案 1 :(得分:1)
正如ryan所说,H12请求超时意味着Heroku的负载平衡器正在向您的应用发送请求,但没有及时得到响应(heroku的最大响应时间为30秒)。有时,请求的计算量很大,或者无效的数据库查询延迟了响应。
问题的根源并不一定意味着您遇到应用程序错误。
在我们的案例中,我们有多个并行处理Web dynos的请求。那些测功机有时会产生H12(超时),而其他所有测功机都运行无瑕。因此,我们可以完全排除所有应用程序问题。重新启动受影响的dyno很有可能会帮助您,因为无论何时重新启动(至少很有可能),您的应用程序都会登陆到其他物理服务器上。
因此,Heroku轮换了“坏服务器”!然后,您的代码将不时地落在这些故障服务器之一上。我不能说一个人是否有“吵闹的邻居”的问题。我还问了Heroku如何防止这种情况发生,而我唯一的回应就是花钱购买专用的性能测功机,这是非常不满意的...