Heroku Europe:对Unicorn工作人员的要求很高

时间:2013-05-04 11:14:29

标签: ruby-on-rails heroku unicorn

我在Heroku上有一个应用程序,我分叉试用欧洲地区的支持。 经过一些初步障碍(Heroku Europe region: "Application error" when trying to fork)后,这似乎工作正常。

我使用ab(Apache Bench)工具运行了一个简单的负载测试,预计会看到每秒请求的改进。但事实并非如此:

有10个并发用户的1000次请求的时间安排(ab -n 1000 -c 10< URL>)

US:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      305  349  44.4    337     719
Processing:   128  356 282.8    244    2213
Waiting:      127  350 283.0    238    2213
Total:        442  705 280.5    610    2521

EU:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      125  188  47.6    175     451
Processing:    67 2595 3537.9   3309   30171
Waiting:       66 2591 3538.9   3309   30170
Total:        207 2783 3536.2   3472   30321

有些事情跳出来了:

    正如预期的那样,
  • 延迟(参见“连接:”)显然比欧盟低于美国。非常好。
  • 欧盟的一些要求需要30秒?什么?

经过调查,这就是我发现的:

  • Heroku的默认请求超时为30秒:任何超过该请求的请求都将被终止。 这解释了最多30秒。
  • 但为什么会这样呢?我查看了日志,发现请求最初很快,然后开始需要更长的时间,直到最终,他们似乎“挂”在一名独角兽工作者。这些工作人员的超时时间为15秒,之后工作人员被Unicorn主程序程序杀死并重新启动(在Heroku日志中显示为H13错误)。我认为这个请求不会被重试,导致最终时间为30秒。

我看过New Relic,但这些好奇的慢速请求只显示99%的时间花在一些未指定的“应用程序代码(ROOT)”(与实际数据库访问等分开显示),没有可能向下钻取(注意:我正在制定免费计划)。应用程序代码似乎没有任何问题(毕竟它在美国运行良好)。

我的问题:我该如何调试?我可以改变一些配置来解决这个问题吗?我错过了什么?

更新

我在评论中尝试了这些建议,最后完全为欧盟禁用了Memcachier插件(另外我改变了应用程序,根本不再进行缓存,只是作为测试)。

这确实解决了Unicorn超时(尽管它们似乎现在少了(!))。

1 个答案:

答案 0 :(得分:0)

我怀疑你的一个插件是在不同的地区配置的。使用config:get检索memcachier网址:

$ heroku config:get MEMCACHIER_URL

然后将域名粘贴到http://ip-lookup.net/之类的内容,以查看托管加载项的地理位置。

如果它在美国,那么你需要在欧盟重新配置:

$ heroku addons:remove memcachier
$ heroku addons:add memcachier

它应该在正确的区域内提供。

如果加载项是provisioned in the wrong region,那么这是一个错误。如果是这样,请在此处使用您的应用名称进行评论,我们可以对其进行调查。