首先,我对Heroku的H12超时非常熟悉。我将延迟作业用于长时间运行的任务等。
我看到的问题是在本地需要2秒的rails 3请求才会在Heroku上超时。我已经为整个控制器操作添加了日志记录,在本地和heroku上,代码执行大约需要2秒。
Heroku的例子:
2011-09-28T20:06:43+00:00 app[web.2]: Started POST "/xyz" for 69.181.51.78 at Wed Sep 28 13:06:43 -0700 2011
2011-09-28T20:07:12+00:00 app[web.2]: ***saved in 0.027939 seconds
2011-09-28T20:07:12+00:00 app[web.2]: ***split in 0.006164 seconds
2011-09-28T20:07:12+00:00 app[web.2]: ***reject in 0.017268 seconds
2011-09-28T20:07:12+00:00 app[web.2]: ***validate in 0.029043 seconds
2011-09-28T20:07:13+00:00 heroku[router]: Error H12 (Request timeout) -> POST xyz.com/xyz dyno=web.2 queue= wait= service=30000ms status=503 bytes=0
2011-09-28T20:07:13+00:00 app[web.2]: ***duped in 0.561905 seconds
2011-09-28T20:07:13+00:00 app[web.2]: ***dropped cats in 0.005318 seconds
2011-09-28T20:07:14+00:00 app[web.2]: ***added in 0.148055 seconds
2011-09-28T20:07:14+00:00 app[web.2]: ***saved in 0.245283 seconds
2011-09-28T20:07:14+00:00 app[web.2]: ***handled in 1.721555 seconds
从最后一行可以看出,根据日志记录,整个过程需要1.7秒,但这些日志行都没有显示29秒(我们使用的是Rack.Timeout并将其设置为29秒)
请求是一个相当大的POST约72K,而***复制日志行我正在重复大小相同的哈希。我是否有可能达到Heroku内存限制并且会显示为H12超时?
答案 0 :(得分:1)
事实证明这是Heroku的一个临时问题,持续了几天。它解决了自己。
答案 1 :(得分:0)
我会尝试安装New Relic add-on(docs here) - 它支持监视运行Rails(ref)的dynos上的内存使用情况。看看是否能为您提供有关您正在使用多少内存的数据。
Heroku文档说dynos get 512MB of memory并且在它们耗尽时开始抛出R14和R15错误。你在日志中看到任何R14或R15吗?