2010-08-13 2 views
0

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

PID         VMSize           Private       Имя
18161 263.5 MB 75.4 MB Rack:/rails_apps/my_app/current

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

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

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

мой установки
четверть ломтика Rackspace Cloud (4 Гб RAM & 1/4 двойного четырехъядерных)
CentOS 5.4
Rails 3.0RC
рубинового 1.9.2dev (2010-05-31 редакция 28117) [x86_64-Linux]
Пассажир 2.2.15 с беспородных

опции конфигурации Nginx:
passenger_max_pool_size 30;
пассажирское соединение; #in/location block.

Я пробовал консервативный нереститься, и я наблюдаю то же поведение.

+1

Я предполагаю, что это ожидаемое поведение Пассажира. Согласно блогу Пассажира: «Раньше, когда возникали процессы приложений, Phusion Passenger не может обрабатывать HTTP-запросы до тех пор, пока процессы не будут созданы, потому что Phusion Passenger удерживает блокировку в пуле приложений, пока это происходит». Мне трудно поверить, что Пассажир может быть использован в приложении с высоким трафиком. Приложение сможет реагировать после перезагрузки. Помимо этого пассажир выглядит хорошо .. с нетерпением жду v3. Догадываюсь, что я должен придерживаться w/mongrel на данный момент. – johnmcaliley

ответ

2

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

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

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

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

+0

Hongli, спасибо за ответ и спасибо за работу, которую вы, ребята, сделали на Пассажире! Пассажир 3 выглядит потрясающе .. особенно новый перезапуск и нулевой простоя перезапускаются. С этими новыми функциями проблемы, которые я описал в моем вопросе, не являются проблемой. Что касается потребления памяти и времени запуска процесса, после использования mongrel и тонкого для одного и того же приложения, я считаю, что это проблема с Rails 3 приложениями, которые имеют много зависимостей. Похоже, много лишних затрат было добавлено к времени запуска Rails 3 (Bundler и т. Д.) – johnmcaliley

Смежные вопросы