Я работал над развертыванием сравнительно большого приложения Rails (Rails 2.3.5), и недавно проводил нагрузочное тестирование, и мы обнаружили, что пропускная способность сайта намного ниже ожидаемого уровня трафика.
Мы работали на стандартном 32-битном сервере, 3 ГБ ОЗУ с Centos, и мы использовали Ruby Enterprise Edition (последняя сборка), Passenger (Последняя сборка) и Nginx (Последняя сборка) - когда есть только один или два пользователя сайт работает нормально (как и следовало ожидать), однако, когда мы пытаемся увеличить нагрузку до ~ 50 одновременных запросов, он полностью умирает. (Отчет Apache Bench ~ 2,3 рэк / сек, что ужасно )
Мы запускаем RPM и пытаемся определить, где проблема с загрузкой, но она довольно равномерно распределена по Rails, SQL и Memcached, поэтому мы более или менее проходим и оптимизируем кодовую базу.
Из чистого отчаяния мы ускорили работу большого экземпляра EC2 (Ubuntu 9.10, 7,5 ГБ ОЗУ, 2 вычислительных блока / ядра) и настроили ту же конфигурацию, что и исходный сервер, и, хотя ресурсов было больше, мы все еще видели жалкие результаты .
Итак, потратив слишком много времени на попытки оптимизации, поиграв с настройками кэширования и т. Д., Я решил проверить пропускную способность некоторых ублюдков, и да-да, они работают намного лучше, чем Passenger.
В настоящее время конфигурация состоит из 15x Mongrels, которые проксируются через Nginx, и мы, похоже, отвечаем нашим требованиям к нагрузке просто , но этого недостаточно, чтобы я чувствовал себя комфортно при запуске ... Что мне было интересно, так это если кто-нибудь знает о возможных причинах этого ...?
Моя конфигурация для passenger / nginx была:
- Работники Nginx: пробовали от 1 до 10, обычно три, хотя.
- Максимальный размер пула пассажиров: 10–30 (да, эти цифры довольно высоки)
- Пассажирские глобальные очереди: пробовал и выключать.
- NGinx GZip on: да
Стоит отметить, что мы увеличили максимальный размер тела клиента nginx до 200 м, чтобы можно было загружать большие файлы.
В любом случае предложения будут действительно оценены, хотя шавки работают нормально, это меняет то, как мы много делаем, и я бы действительно предпочел использовать Пассажира - кроме того, разве это не должно было сделать это проще и работать лучше?