Есть ли способ получить хорошую производительность в Rails без потери возможности отладки и разработки кода? - PullRequest
3 голосов
/ 17 декабря 2011

Мне поставили задачу ускорить время отклика API, запущенного на Ruby on Rails (3.0.9).

Все запросы отправляются в xml, и время отклика было ужасным.Приемлемое время ответа было бы <100 мс, но я испытывал 130-4000 мс, в среднем около 1100 мс. </p>

Это было даже после того, как я ...

  • Оптимизировал все индексы MySQL (черезмедленный журнал запросов черной магии)
  • Установлен fast_xs (так как это был основной совет по ускорению генерации XML)
  • Проанализировал log / production.log с помощью request-log-analyzer и не найденлюбая конкретная проблемная область (т. е. кажется, что все запросы довольно равномерно работают медленно)
  • Сделан вывод, что, поскольку это довольно мощный сервер (среднего уровня), с аппаратным обеспечением должна быть какая-то проблема ...

Пример продолжительности запроса:

Completed 200 OK in 1355ms (Views: 814.7ms | ActiveRecord: 217.1ms)
Completed 200 OK in 138ms (Views: 6.8ms | ActiveRecord: 4.9ms)
Completed 200 OK in 327ms (Views: 6.8ms | ActiveRecord: 4.8ms)
Completed 200 OK in 317ms (Views: 6.8ms | ActiveRecord: 5.8ms)
Completed 200 OK in 413ms (Views: 6.5ms | ActiveRecord: 47.9ms)
Completed 201 Created in 2281ms (Views: 8.9ms | ActiveRecord: 324.7ms)
Completed 201 Created in 2249ms (Views: 37.4ms | ActiveRecord: 261.1ms)
Completed 201 Created in 1010ms (Views: 8.5ms | ActiveRecord: 222.2ms)
Completed 200 OK in 1285ms (Views: 644.0ms | ActiveRecord: 224.2ms)
Completed 200 OK in 135ms (Views: 6.7ms | ActiveRecord: 4.9ms)
Completed 200 OK in 287ms (Views: 6.7ms | ActiveRecord: 4.9ms)
Completed 200 OK in 459ms (Views: 6.3ms | ActiveRecord: 66.2ms)
Completed 201 Created in 1621ms (Views: 56.8ms | ActiveRecord: 412.0ms)
Completed 201 Created in 1716ms (Views: 57.1ms | ActiveRecord: 367.9ms)
Completed 201 Created in 1118ms (Views: 8.3ms | ActiveRecord: 292.2ms)
Completed 200 OK in 1355ms (Views: 871.6ms | ActiveRecord: 153.9ms)
Completed 200 OK in 300ms (Views: 263.6ms | ActiveRecord: 0.4ms)
Completed 200 OK in 1338ms (Views: 6.4ms | ActiveRecord: 227.7ms)
Completed 201 Created in 927ms (Views: 8.3ms | ActiveRecord: 188.3ms)
Completed 200 OK in 1458ms (Views: 827.4ms | ActiveRecord: 259.6ms)
Completed 200 OK in 182ms (Views: 6.9ms | ActiveRecord: 4.8ms)
Completed 200 OK in 261ms (Views: 6.8ms | ActiveRecord: 4.8ms)

Ужасно ... Затем ... После проверки использования производственной конфигурации (incl config.cache_classes = true, config.log_level =: info), оно изменилось на следующее:

Completed 200 OK in 2ms (Views: 0.6ms | ActiveRecord: 0.4ms)
Completed 200 OK in 2ms (Views: 0.5ms | ActiveRecord: 0.4ms)
Completed 200 OK in 2ms (Views: 0.5ms | ActiveRecord: 0.4ms)
Completed 200 OK in 2ms (Views: 0.2ms | ActiveRecord: 0.5ms)
Completed 201 Created in 126ms (Views: 2.7ms | ActiveRecord: 3.8ms)
Completed 201 Created in 30ms (Views: 2.5ms | ActiveRecord: 2.3ms)
Completed 201 Created in 11ms (Views: 1.9ms | ActiveRecord: 1.6ms)
Completed 200 OK in 7ms (Views: 2.3ms | ActiveRecord: 2.6ms)
Completed 201 Created in 18ms (Views: 1.7ms | ActiveRecord: 3.9ms)
Completed 201 Created in 16ms (Views: 1.5ms | ActiveRecord: 2.9ms)
Completed 200 OK in 2ms (Views: 0.6ms | ActiveRecord: 0.4ms)
Completed 200 OK in 2ms (Views: 0.5ms | ActiveRecord: 0.4ms)
Completed 200 OK in 2ms (Views: 0.2ms | ActiveRecord: 0.4ms)
Completed 201 Created in 115ms (Views: 26.5ms | ActiveRecord: 4.2ms)
Completed 201 Created in 23ms (Views: 2.5ms | ActiveRecord: 2.3ms)
Completed 201 Created in 11ms (Views: 1.8ms | ActiveRecord: 1.6ms)
Completed 200 OK in 7ms (Views: 2.3ms | ActiveRecord: 3.6ms)
Completed 201 Created in 16ms (Views: 1.6ms | ActiveRecord: 2.4ms)
Completed 201 Created in 16ms (Views: 1.5ms | ActiveRecord: 2.7ms)
Completed 201 Created in 16ms (Views: 1.5ms | ActiveRecord: 2.6ms)
Completed 201 Created in 17ms (Views: 1.5ms | ActiveRecord: 3.6ms)
Completed 201 Created in 15ms (Views: 1.5ms | ActiveRecord: 2.7ms)
Completed 201 Created in 15ms (Views: 1.4ms | ActiveRecord: 2.4ms)
Completed 201 Created in 79ms (Views: 1.8ms | ActiveRecord: 8.4ms)
Completed 201 Created in 18ms (Views: 1.5ms | ActiveRecord: 3.9ms)

Итог: если вы видите плохую производительность Rails во время разработки, включите производственную конфигурацию и посмотрите, чтовы получаете перед отказом от Rails:)

Это приводит к вопросу: есть ли способ добиться хорошей производительности в Rails без необходимости устанавливать производственные настройки и, таким образом, терять способность отлаживать и разрабатывать код вэффективный способ?https://github.com/thedarkone/rails-dev-boost лучшая практика?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2011
0 голосов
/ 17 декабря 2011

Ну, я не уверен, в чем ваша проблема: на своей рабочей машине используйте рабочую среду Rails и среду разработки на своей машине разработчика ...

Из того, что вы говоритев вашем посте кажется, что ваши проблемы проистекают из желания разрабатывать непосредственно на вашем производственном экземпляре.В общем, это плохая идея, и, конечно, НЕ «путь Rails».Rails предоставляет 3 отдельные среды (dev, testing, production) и старается держать их отдельно ...

Обновление: вы, вероятно, будете очень заинтересованы в Rails 3.2 (http://weblog.rubyonrails.org/2011/12/20/rails-3-2-rc1-faster-dev-mode-routing-explain-queries-tagged-logger-store), которая будет иметьгораздо более быстрый режим разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...