Проблемы с нерестом Phusion Passenger - PullRequest
0 голосов
/ 14 августа 2010

Я работаю с приложением Rails 3RC и впервые использую Phusion Passenger. Запуск приложения по первому запросу занимает около 30 секунд, и вот типичное потребление памяти для каждого процесса ruby ​​в моем приложении:

PID VMSize Личное имя
18161 263,5 МБ 75,4 МБ Стойка: / rails_apps / my_app / current

Это типичное потребление памяти? Мое приложение занимает около 11 МБ (<4 МБ, если вы не включаете мои / публичные активы). </p>

Он работает нормально после первого запроса, если есть один пользователь, но у меня возникают проблемы, когда я запускаю некоторые из своих пользовательских сценариев стресс-тестирования, а также когда я использую свою функцию поиска предложений, которая делает несколько быстрых вызовов ajax ( что я ожидал, потому что следующий запрос приходит до того, как первый закончится). Вот что я нахожу странным ... сервер начинает порождать потоки Ruby, на загрузку которых уходит дополнительно 30 секунд, но никакие другие запросы не могут быть обработаны во время порождения. Просто чтобы перепроверить, я тестировал с браузерами в других сетях, в то время как процессы порождали, просто чтобы убедиться, что это не что-то специфичное для моей локальной машины (как все запросы, обслуживаемые одним процессом). Эти запросы браузера должны были ждать, пока все новые вызовы не будут завершены.

Итак, мой вопрос ... это типичное поведение Пассажира? Ожидание нереста, прежде чем любой другой запрос может прийти через? Изучив документацию, я подумал, что другой запрос будет обрабатываться незанятыми процессами ruby ​​во время нереста. Вот версии, которые я использую, если вы, ребята, знаете о любых несовместимостях. Заранее спасибо! Я действительно не хочу возвращаться к Монгрелу; -)

мои настройки
Rackspace Cloud с четвертным срезом (4 ГБ ОЗУ и 1/4 двухъядерного ядра)
CentOS 5.4
Рельсы 3.0RC
ruby 1.9.2dev (2010-05-31 редакция 28117) [x86_64-linux]
Пассажир 2.2.15 с дворнягой

Параметры конфигурации nginx:
passenger_max_pool_size 30;
пассажир включен; # в / блок местоположения ..

Я пробовал консервативное нерест и вижу то же поведение.

1 Ответ

2 голосов
/ 19 сентября 2010

Пассажир 3 с асинхронным порождением.Вы даже можете установить минимальное количество процессов, которые нужно поддерживать.

Даже при старом поведении большинство сайтов с большим трафиком не сталкиваются с этой проблемой, потому что:

  1. Создание первогоПроцесс обычно намного быстрее.Для меня приложения Rails обычно запускаются за 5 секунд.
  2. Умный метод порождения значительно ускоряет порождение дополнительных процессов, обычно для этого требуется всего 10% исходного времени.
  3. Люди с большим трафикомвеб-сайты, как правило, устанавливают для своих пулов время простоя более высокие значения, чтобы процессы не закрывались в течение дня, а очищались только ночью.

Использование памяти несколько выше.Большинству приложений Rails, которые я видел, требуется 20-50 МБ приватной памяти.

...