Мне поставили задачу ускорить время отклика 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 лучшая практика?