Pour sauter dans le wagon à bande de Phusion Passenger, nous avons configuré un serveur de préparation pour une petite application de rails afin de tester les choses.
Jusqu'à présent, il a été très agréable à utiliser, cela facilite l'installation / la configuration et le déploiement d'applications. Le problème est que le site que nous utilisons n'est pas très souvent touché et qu'il semble arrêter les serveurs en arrière-plan. Cela signifie que lorsque quelqu'un se rend sur le site, il attend très longtemps avant de démarrer un nouveau serveur pour traiter la demande. Nous avons lu la documentation, essayé plusieurs configurations différentes (modes smart / smart-lv2, passageridletime, etc.) et n'avons toujours pas trouvé de vraie solution.
Après avoir parcouru les résultats de Google, nous ne pouvons pas vraiment trouver d'informations utiles. Actuellement, nous avons une tâche cron qui fait une requête de temps en temps pour tenter de maintenir les serveurs en marche.
Quelqu'un d'autre rencontre-t-il ce problème et avez-vous des conseils pour une solution?
la source
Réponses:
Ce qui se passe, c'est que votre Application et / ou ApplicationSpawners s'arrête en raison d'un délai d'expiration. Pour traiter votre nouvelle demande, Passenger doit démarrer une nouvelle copie de votre application, ce qui peut prendre plusieurs secondes, même sur une machine rapide. Pour résoudre le problème, il existe quelques options de configuration Apache que vous pouvez utiliser pour maintenir votre application en vie.
Voici précisément ce que j'ai fait sur mes serveurs. PassengerSpawnMethod et PassengerMaxPreloaderIdleTime sont les options de configuration les plus importantes dans votre situation.
En utilisant le mode d'apparition "intelligent" et en désactivant PassengerMaxPreloaderIdleTime, Passenger gardera 1 copie de votre application en mémoire à tout moment (après la première requête après le démarrage d'Apache). Les
Application
auditeurs individuels serontfork
édités de cette copie, qui est une opération super bon marché. Cela se produit si rapidement que vous ne pouvez pas dire si votre application a dû générer un auditeur ou non.Si votre application est incompatible avec le frai intelligent, je vous recommande de conserver un grand PassengerPoolIdleTime et de frapper votre site périodiquement en utilisant curl et un cronjob ou monit ou quelque chose pour garantir que l'auditeur reste en vie.
Le guide de l'utilisateur passager est une référence formidable pour ces options de configuration et d'autres.
modifier : Si votre application est incompatible avec le frai intelligent, il existe de nouvelles options très intéressantes
Ainsi, si vous combinez PassengerPreStart et PassengerMinInstances, Passenger lancera 3 instances immédiatement après le chargement d'Apache, et gardera toujours au moins 3 instances actives, de sorte que vos utilisateurs verront rarement (voire jamais) un retard.
Ou, si vous utilisez déjà le frai intelligent (recommandé)
PassengerMaxPreloaderIdleTime 0
, vous pouvez ajouterPassengerPreStart
pour obtenir l'avantage supplémentaire d'un démarrage immédiat.Un grand merci aux héros de phusion.nl !
la source
RailsSpawnMethod
est obsolète au profit dePassengerSpawnMethod
modrails.com/documentation/…Juste au cas où des utilisateurs de serveurs nginx trébucheraient sur cette question, les directives «PassengerMaxRequests» et «PassengerStatThrottleRate» ne se traduisent pas en nginx. Cependant les autres font:
HTH!
EDIT
rails_spawn_method
est obsolète dans le passager 3 à la placetout le reste est juste bon jusqu'à ce jour.
la source
"passenger_max_preloader_idle_time" directive is duplicate
Vous pouvez également utiliser PassengerMinInstances:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances
Cela peut être combiné avec PassengerPreStart
la source
RÉ:
Juste quelque chose à ajouter et qui pourrait être utile.
La méthode de spawn par défaut dans la version actuelle est "smart-lv2", qui ignore le spawner du framework, donc définir le délai de spawner du framework n'aurait aucun effet de toute façon à moins que vous ne définissiez explicitement la méthode de spawn sur "smart".
Source: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1
la source
Si votre hôte est un serveur partagé, comme le mien, vous ne pouvez pas modifier les paramètres et vous êtes coincé avec une tâche cron.
la source
J'ai également eu ce problème mais je n'ai pas pu modifier les paramètres des passagers car je n'avais aucune autorisation en écriture sur ce fichier. J'ai trouvé un outil ( http://www.wekkars.com ) qui permet à mon application de répondre rapidement. Peut-être que cela peut aussi être une solution pour vous.
la source
vérifier la version du passager. c'était RailsSpawnMethod
<string>
pour les anciennes versions.Si tel est le cas (si je me souviens bien), remplacez Passenger with Rails dans toutes les directives de configuration ou recherchez les anciennes docs des passagers pour plus de détails
la source