ActionDispatch :: Routing :: RouteSet # вызов Rails 4.1 очень медленный

Я искал несколько дней, но не нашел подходящих ответов на этот вопрос.

В моем приложении Rails 4.1, размещенном на Heroku, при увеличении нагрузки некоторые запросы PUT становятся ДЕЙСТВИТЕЛЬНО медленными. Самый медленный сегодня - 53 секунды. И все это без регистрации медленных запросов в базе данных (MongoDB). Обычно этот запрос довольно быстро занимает 0,3 мс. Запрос выполняется медленно, независимо от полезной нагрузки.

После установки New Relic он пролил больше света на ситуацию, но я до сих пор не знаю, где исправить эту проблему.

Код в контроллере быстрый, но, согласно New Relic, медленным является ActionDispatch :: Routing :: RouteSet # call

Вот дамп того, что сообщает New Relic:

Slowest components                      Count   Duration    %
ActionDispatch::Routing::RouteSet#call  1   53,000 ms   100%
Plugin::FetchablesController#update     1   38 ms       0%
Rails::Rack::Logger#call                1   1 ms        0%
ActionDispatch::Cookies#call            1   1 ms        0%
ActiveSupport::Cache::Strategy::LocalCache::Middleware#call 1   0 ms    0%
Rack::Runtime#call                      1   0 ms        0%
Total                                       53,000 ms   100%

Другая информация, которая может помочь или может иметь какое-то отношение к этому. У меня есть псевдоним для маршрутов, но я не понимаю, почему это должно иметь значение.

namespace :plugin do
   resources :fetchables, path: :minables
end

Будем очень признательны за любые идеи о том, что может происходить и что я могу сделать, чтобы это исправить.

Обновление. Похоже, это связано с памятью. Когда мы обновились до Performance Dynos, мы перестали видеть эти ошибки. Но это то, что, похоже, серьезно плохо настроено в Heroku.


person Anders Fredriksson    schedule 05.02.2015    source источник
comment
Я тоже столкнулся с той же проблемой. Вы нашли какое-нибудь решение? Какую версию рельсов вы используете?   -  person Hardik Joshi    schedule 10.02.2015
comment
Нет, решения пока нет. Я сузил проблему до того, что это происходит, когда пользователи делают большие обновления. Особенно, если у них медленное соединение. Возможно, rails тратит свое время на вызов RouteSet, когда получает данные для параметров? Я всегда думал, что он будет получен как один большой кусок в готовом запросе?   -  person Anders Fredriksson    schedule 11.02.2015
comment
Я столкнулся с таким сценарием с простыми вызовами. В параметрах не было больших блоков данных. Я подозреваю, что это может быть связано с большим объектом env, который содержит большие данные сеансов.   -  person Hardik Joshi    schedule 12.02.2015
comment
У меня такая же проблема. Кто-нибудь нашел какие-нибудь зацепки?   -  person Walksalong    schedule 19.03.2015
comment
Пока ничего. но я только что переключился на Puma на Heroku, и я надеюсь, что он может исправить проблемы, но еще не копался и не тестировал его.   -  person Anders Fredriksson    schedule 20.03.2015
comment
Не могли бы вы поделиться некоторыми примерами запросов на размещение, которые имеют тенденцию быть медленными?   -  person Varun Natraaj    schedule 18.04.2015
comment
Отправьте ответ, если вы его нашли, потому что я тоже с этим сталкиваюсь.   -  person okysabeni    schedule 24.04.2015
comment
Привет, я до сих пор не смог решить эту проблему, но мой способ справиться с ней сейчас будет заключаться в том, чтобы отказаться от Heroku, и это одна из основных причин   -  person Anders Fredriksson    schedule 25.04.2015
comment
Сколько пользователей / трафика вы получаете? Вы сделали нагрузочный тест приложения?   -  person Nona    schedule 08.05.2015
comment
Мы также столкнулись с аналогичным медленным вызовом ActionDispatch :: Routing :: RouteSet #. В нашем случае это не было напрямую связано с этим вызовом, но это была общая нехватка памяти на нашей машине. Из-за неправильной настройки Rack :: Cache Rails выделял в 3 раза больше объектов, чем обычно. Мы обнаружили это, изучая поведение виртуальной машины Ruby в New Relic.   -  person Pascal Lindelauf    schedule 25.06.2015
comment
Спасибо @PascalLindelauf. Я подозреваю, что это проблема с памятью. Потому что теперь, когда я думаю об этом, этого не произошло с тех пор, как мы обновились до Performance Dynos, у которых намного больше памяти.   -  person Anders Fredriksson    schedule 26.06.2015
comment
Какую версию Ruby вы использовали? Вы использовали версию без МРТ?   -  person Jeremy Rodi    schedule 28.07.2015


Ответы (2)


Замедление - это показатель того, что он специфичен для Heroku. Вероятно, почему вы увидели, что проблема исчезла при обновлении до Performance Dynos.

person wurde    schedule 09.07.2015

Вы можете использовать rack-mini-profiler, чтобы проверить, в чем реальная проблема.

person rocLv    schedule 09.08.2015