Ce qui se passe, c'est que votre application et/ou vos ApplicationSpawners s'arrêtent en raison d'un dépassement de délai. 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 ce problème, il existe quelques options de configuration d'Apache que vous pouvez utiliser pour maintenir votre application en vie.
Voici en particulier ce que j'ai fait sur mes serveurs. Les options PassengerSpawnMethod et PassengerMaxPreloaderIdleTime sont les options de configuration les plus importantes dans votre situation.
# 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
En utilisant un mode de création "intelligent" et en désactivant PassengerMaxPreloaderIdleTime, Passenger conservera une copie de votre application en mémoire à tout moment (après la première requête après le démarrage d'Apache). Particulier Application
les auditeurs seront fork
ée à partir de cette copie, ce qui est une opération très peu coûteuse. Elle se déroule si rapidement qu'il est impossible de savoir si votre application a dû ou non créer un auditeur.
Si votre application est incompatible avec le smart spawning, je recommanderais de garder un grand PassengerPoolIdleTime et de visiter votre site périodiquement en utilisant curl et un cronjob ou monit ou quelque chose comme ça pour s'assurer que l'auditeur reste en vie.
En Guide de l'utilisateur passager est une excellente référence pour ces options de configuration et bien d'autres encore.
éditer : Si votre application est incompatible avec le smart spawning, il y a quelques nouvelles options qui sont très belles
# 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
Ainsi, si vous combinez PassengerPreStart et PassengerMinInstances, Passenger démarrera 3 instances immédiatement après le chargement d'Apache, et maintiendra toujours au moins 3 instances en service, de sorte que vos utilisateurs ne verront que rarement (voire jamais) un délai.
Ou, si vous utilisez le "smart spawning" (recommandé) avec la fonction PassengerMaxPreloaderIdleTime 0
vous pouvez ajouter PassengerPreStart
pour obtenir l'avantage supplémentaire d'un démarrage immédiat.
Un grand merci aux héros de phusion.nl !