来自应用程序的间歇性超时应该永不超时(不是“R12请求超时”错误)

时间:2013-05-28 16:22:15

标签: ruby-on-rails heroku ruby-on-rails-3.2 timeout

我有一个简单的业务Rails 3.2.13应用程序,只有一个用户的基础,非常小的Postgres数据库表,以及非常简单的Active Record DB查询。我在独角兽网络服务器上的两个dynos,零工作者上运行它。应用程序的根页面通常在开发时加载大约150毫秒,在Heroku的生产中加载不到1秒。

除非随机超时。我在日志中看到超时,但不是典型的R12请求超时。超时看起来像这样:

2013-05-28T16:04:28.004290+00:00 app[web.2]: Started GET "/" for 72.28.209.197 at 2013-05-28 16:04:28 +0000
2013-05-28T16:04:44.225643+00:00 app[web.2]: E, [2013-05-28T16:04:44.225444 #2] ERROR -- : worker=2 PID:87 timeout (16s > 15s), killing
2013-05-28T16:04:44.238422+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path=/ host=[REDACTED].herokuapp.com fwd="72.28.209.197" dyno=web.2 connect=7ms service=16240ms status=503 bytes=0
2013-05-28T16:04:44.255813+00:00 app[web.2]: E, [2013-05-28T16:04:44.255554 #2] ERROR -- : reaped #<Process::Status: pid 87 SIGKILL (signal 9)> worker=2
2013-05-28T16:04:44.298023+00:00 app[web.2]: I, [2013-05-28T16:04:44.297643 #103]  INFO -- : worker=2 ready

当该请求有效时,它看起来像这样:

2013-05-28T16:03:36.965507+00:00 app[web.1]: sequenceId="102642"] Started GET "/" for 72.28.209.197 at 2013-05-28 16:03:36 +0000
2013-05-28T16:03:37.388261+00:00 app[web.1]: sequenceId="102690"] Processing by OverviewController#index as HTML
2013-05-28T16:03:38.238877+00:00 app[web.1]: sequenceId="102707"]   Rendered overview/index.html.erb within layouts/application (315.8ms)
2013-05-28T16:03:38.311974+00:00 app[web.1]: sequenceId="102710"] Completed 200 OK in 924ms (Views: 432.4ms | ActiveRecord: 92.1ms)
2013-05-28T16:03:38.322786+00:00 heroku[router]: at=info method=GET path=/ host=[REDACTED].herokuapp.com fwd="72.28.209.197" dyno=web.1 connect=2ms service=1375ms status=200 bytes=136795
2013-05-28T16:03:42.625787+00:00 app[web.1]: sequenceId="102940"] Started GET "/assets/favicon.ico" for 72.28.209.197 at 2013-05-28 16:03:42 +0000
2013-05-28T16:03:58.753408+00:00 app[web.1]: sequenceId="104359"] E, [2013-05-28T16:03:58.753173 #2] ERROR -- : worker=2 PID:66 timeout (16s > 15s), killing
2013-05-28T16:03:58.801152+00:00 app[web.1]: sequenceId="104362"] E, [2013-05-28T16:03:58.800993 #2] ERROR -- : reaped #<Process::Status: pid 66 SIGKILL (signal 9)> worker=2
2013-05-28T16:03:58.798722+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path=/assets/favicon.ico host=[REDACTED].herokuapp.com fwd="72.28.209.197" dyno=web.1 connect=3ms service=16175ms status=503 bytes=0
2013-05-28T16:03:59.127150+00:00 app[web.1]: sequenceId="104397"] I, [2013-05-28T16:03:59.126795 #84]  INFO -- : worker=2 ready

注意事项:请求响应时间为924毫秒。但之后发生了一些奇怪的错误。

DB queries而言,这就是该请求的样子。那里没有令人兴奋的事情发生,那些数据库表只包含几百行数据。没有理由为什么响应有时需要1秒,而其他时间则需要15秒以上。这是极其简单的控制器操作的代码:

class OverviewController < ApplicationController

  def index
    @current_event = Event.recent
    @areas = Area.order(:position)
    @reservations = Reservation.find(:all,
      :conditions => { :event_id => @current_event.id },
      :order => 'created_at DESC',
      :limit => 5)
  end

end

这是Event#recent方法,只是为了让你可以看到它没有做任何可能花费15秒以上的事情:

def self.recent
  Event.last || Event.create
end

我不知道如何让这个应用程序稳定下来,除了将它从Heroku移开。我不知道有什么方法可以解决这个问题,我想Heroku也无济于事。我只是卡住了?除了将应用程序移至Engine Yard之外,我是否有任何解决问题的选项?

1 个答案:

答案 0 :(得分:4)

这里没有任何帮助,这个网站是Heroku的技术支持。支付35美元/月并没有给我任何支持,所以我被困住了,Heroku无法前进。

所以我对这个问题的回答是将应用程序移动到Engine Yard。我没有看到我有任何其他选择。 Heroku在工作时非常棒,当它不起作用时,它是一个完全的谜,没有技术支持。