Большое время ожидания ответа на Heroku с Rails RefineryCMS

Я запускаю приложение RefineryCMS на Heroku. Это на двух веб-динамометрах, но фактическая нагрузка динамометра составляет менее 10% на штуку (если я правильно читаю New Relic) для текущего незначительного трафика в 13 запросов в минуту.

Однако среднее время отклика моего сервера приложений составляет 800 мс, и почти все время уходит в очередь запросов. Каждый другой запрос будет страдать от всплеска очереди запросов на 3000 мс (или намного больше), в то время как некоторые другие будут нормально загружаться менее чем за 200-300 мс благодаря агрессивному кэшированию памяти.

Как узнать, в чем основная причина проблемы?

Редактировать: После дальнейшего изучения журнала мне пришлось задать себе вопрос: ожидаемое ли поведение RefineryCMS с размещением ресурсов на Amazon S3?

heroku[router]: method=GET path=/system/images/W1siZiIsIjIwMTMvMDQvMTQvMTUvMTAvMDkvNzY4L0pFQU5fQ0xBVURFX1BFTk5FVElFUi5qcGciXSxbInAiLCJ0aHVtYiIsIjI1MHgiXV0/JEAN-CLAUDE%20PENNETIER.jpg service=1061ms status=200 bytes=11232
heroku[router]: method=GET path=/system/images/W1siZiIsIjIwMTMvMDQvMTQvMTUvMTEvMzkvMjI3L01BUklTU19KQU5TT05TLmpwZyJdLFsicCIsInRodW1iIiwiMjUweCJdXQ/MARISS%20JANSONS.jpg service=1161ms status=200 bytes=14358
heroku[router]: method=GET path=/system/images/W1siZiIsIjIwMTMvMDQvMTQvMTUvMjEvNDAvOC9TaXJfTkVWSUxMRV9NQVJSSU5FUi5qcGciXSxbInAiLCJ0aHVtYiIsIjI1MHgiXV0/Sir%20NEVILLE%20MARRINER.jpg service=5412ms status=200 bytes=23191

Эти файлы размещаются локально и, таким образом, отягощают запросы?


person Theodor Vararu    schedule 16.04.2013    source источник


Ответы (2)


Это похоже на медленные запросы. Загляните в свои журналы для получения дополнительной информации, но я подозреваю, что вы увидите кучу ошибок H12.

Я бы посмотрел на использование Unicorn и Rack::Timeout, если вы еще этого не сделали. Как правило, быстрые запросы замедляются из-за очереди, вызванной другими длительными запросами. Глядя на использование Rack::Timeout, вы можете убить любые запросы, которые выполняются в течение длительного времени (скажем, 15 с), в то время как использование Unicorn позволит вам обслуживать более одного запроса за раз.

Это, конечно, при условии, что вы работаете на Cedar. Если нет, я бы обновился как можно скорее.

person Neil Middleton    schedule 16.04.2013
comment
Я использую Cedar и обслуживаю Unicorn двумя экземплярами. Rack::Timeout также установлен на нечетные 29 секунд, так как я понимаю, что это лучше, чем 30-секундный тайм-аут Unicorn. В любом случае я собираюсь заглянуть в журналы и посмотреть, смогу ли я найти что-нибудь поучительное, но, насколько я знаю, это журналы сервера Rails, и это, похоже, проблема динамического уровня. - person Theodor Vararu; 16.04.2013

Вы пытались переключиться на использование веб-сервера единорога?

Это позволяет вам обслуживать несколько запросов одновременно с одного дино.

Подробнее о настройке здесь.

person Chap    schedule 16.04.2013