Чтобы сесть за руль Phusion Passenger, мы установили промежуточный сервер для небольшого приложения rails, чтобы все проверить.
До сих пор им было очень приятно пользоваться, это упрощает установку / настройку и развертывание приложений. Проблема в том, что сайт, который мы используем, не очень часто посещается и, похоже, в фоновом режиме отключает серверы. Это означает, что когда кто-то заходит на сайт, ему приходится очень долго ждать, пока он не запустит новый сервер для обработки запроса. Мы прочитали документацию, попробовали несколько различных настроек (режимы smart / smart-lv2, неактивное время пассажира и т. Д.) И до сих пор не нашли реального решения.
После просмотра результатов Google мы не можем найти полезную информацию. В настоящее время у нас есть задание cron, которое время от времени отправляет запросы, пытаясь сохранить работу серверов.
Кто-нибудь еще сталкивается с этой проблемой, и вы можете посоветовать, как ее исправить?
источник
Ответы:
Что происходит, так это то, что ваше приложение и / или ApplicationSpawners закрываются из-за тайм-аута. Чтобы обработать ваш новый запрос, Passenger должен запустить новую копию вашего приложения, что может занять несколько секунд даже на быстрой машине. Чтобы решить эту проблему, есть несколько параметров конфигурации Apache, которые вы можете использовать для поддержания активности вашего приложения.
Вот что я сделал на своих серверах. PassengerSpawnMethod и PassengerMaxPreloaderIdleTime - это наиболее важные параметры конфигурации в вашей ситуации.
# Speeds up spawn time tremendously -- if your app is compatible. # RMagick seems to be incompatible with smart spawning # Older versions of Passenger called this RailsSpawnMethod PassengerSpawnMethod smart # Keep the application instances alive longer. Default is 300 (seconds) PassengerPoolIdleTime 1000 # Keep the spawners alive, which speeds up spawning a new Application # listener after a period of inactivity at the expense of memory. # Older versions of Passenger called this RailsAppSpawnerIdleTime PassengerMaxPreloaderIdleTime 0 # Just in case you're leaking memory, restart a listener # after processing 5000 requests PassengerMaxRequests 5000
Используя «умный» режим создания и отключив PassengerMaxPreloaderIdleTime, Passenger всегда будет хранить в памяти 1 копию вашего приложения (после первого запроса после запуска Apache). Отдельные
Application
слушатели будутfork
редактироваться из этой копии, что является сверхдешевой операцией. Это происходит так быстро, что вы не можете сказать, должно ли ваше приложение порождать слушателя или нет.Если ваше приложение несовместимо с умным порождением, я бы рекомендовал сохранить большое время PassengerPoolIdleTime и периодически заходить на ваш сайт с помощью curl и cronjob или monit или чего-то еще, чтобы слушатель оставался в живых.
Руководство пользователя для пассажиров - отличный справочник по этим и другим параметрам конфигурации.
изменить : если ваше приложение несовместимо с умным нерестом, есть несколько новых опций , которые очень хороши
# Automatically hit your site when apache starts, so that you don't have to wait # for the first request for passenger to "spin up" your application. This even # helps when you have smart spawning enabled. PassengerPreStart http://myexample.com/ PassengerPreStart http://myexample2.com:3500/ # the minimum number of application instances that must be kept around whenever # the application is first accessed or after passenger cleans up idle instances # With this option, 3 application instances will ALWAYS be available after the # first request, even after passenger cleans up idle ones PassengerMinInstances 3
Итак, если вы объедините PassengerPreStart и PassengerMinInstances, Passenger будет запускать 3 экземпляра сразу после загрузки apache и всегда будет поддерживать как минимум 3 экземпляра, поэтому ваши пользователи редко (если вообще когда-либо) будут видеть задержку.
Или, если вы уже используете умное создание (рекомендуется)
PassengerMaxPreloaderIdleTime 0
, вы можете добавить,PassengerPreStart
чтобы получить дополнительное преимущество немедленного запуска.Большое спасибо героям phusion.nl !
источник
RailsSpawnMethod
устарел в пользуPassengerSpawnMethod
modrails.com/documentation/…На случай, если кто-то из пользователей сервера nginx наткнется на этот вопрос, директивы PassengerMaxRequests и PassengerStatThrottleRate не переводятся на nginx. Однако другие делают:
rails_spawn_method smart; rails_app_spawner_idle_time 0; rails_framework_spawner_idle_time 0; passenger_pool_idle_time 1000;
HTH!
EDIT
rails_spawn_method
не рекомендуется для пассажира 3, вместо этого используйтевсе остальное просто хорошо до сих пор.
источник
"passenger_max_preloader_idle_time" directive is duplicate
Вы также можете использовать PassengerMinInstances:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances
Это можно комбинировать с PassengerPreStart
источник
RE:
# Additionally keep a copy of the Rails framework in memory. If you're # using multiple apps on the same version of Rails, this will speed up # the creation of new RailsAppSpawners. This isn't necessary if you're # only running one or 2 applications, or if your applications use # different versions of Rails. RailsFrameworkSpawnerIdleTime 0
Просто кое-что добавить и может быть полезно.
Метод создания по умолчанию в текущем выпуске - "smart-lv2", который пропускает средство создания инфраструктуры, поэтому установка тайм-аута средства создания инфраструктуры в любом случае не будет иметь эффекта, если вы явно не установите для метода создания значение "smart".
Источник: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1
источник
Если ваш хост - это общий сервер, такой как мой, вы не можете изменить настройки и застряли на задании cron.
источник
У меня тоже была эта проблема, но я не мог изменить настройки пассажиров, потому что у меня не было прав на запись в этот файл. Я нашел инструмент ( http://www.wekkars.com ), благодаря которому мое приложение быстро реагирует. Может быть, это тоже может быть решением для вас.
источник
проверить версию пассажира.
<string>
для старых версий это был RailsSpawnMethod .Если это так (если я правильно помню), замените Passenger на Rails во всех директивах конфигурации или поищите старые документы для пассажиров для получения более подробной информации.
источник