Was passiert ist, dass Ihre Anwendung und / oder ApplicationSpawners aufgrund einer Zeitüberschreitung heruntergefahren werden. Um Ihre neue Anfrage zu bearbeiten, muss Passenger eine neue Kopie Ihrer Anwendung starten, was selbst auf einem schnellen Computer einige Sekunden dauern kann. Um das Problem zu beheben, gibt es einige Apache-Konfigurationsoptionen, mit denen Sie Ihre Anwendung am Leben erhalten können.
Hier ist speziell, was ich auf meinen Servern getan habe. Die PassengerSpawnMethod und PassengerMaxPreloaderIdleTime sind die Konfigurationsoptionen, die in Ihrer Situation am wichtigsten sind.
# 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
Wenn Sie den "intelligenten" Laichmodus verwenden und PassengerMaxPreloaderIdleTime deaktivieren, speichert Passenger immer 1 Kopie Ihrer Anwendung im Speicher (nach der ersten Anforderung nach dem Starten von Apache). Einzelne Application
Hörer werden fork
aus dieser Kopie herausgeschnitten, was eine supergünstige Operation ist. Es passiert so schnell, dass Sie nicht sagen können, ob Ihre Anwendung einen Listener erzeugen musste oder nicht.
Wenn Ihre App nicht mit Smart Spawning kompatibel ist, würde ich empfehlen, eine große PassengerPoolIdleTime beizubehalten und Ihre Website regelmäßig mit Curl und einem Cronjob oder Monit oder etwas anderem aufzurufen, um sicherzustellen, dass der Hörer am Leben bleibt.
Das Passagier-Benutzerhandbuch ist eine hervorragende Referenz für diese und weitere Konfigurationsoptionen.
Bearbeiten : Wenn Ihre App nicht mit Smart Spawning kompatibel ist, gibt es einige neue Optionen , die sehr hilfreich sind
# 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
Wenn Sie also PassengerPreStart und PassengerMinInstances kombinieren, wird Passenger unmittelbar nach dem Laden von Apache 3 Instanzen hochfahren und immer mindestens 3 Instanzen hochhalten, sodass Ihre Benutzer selten (wenn überhaupt) eine Verzögerung feststellen.
Wenn Sie bereits Smart Spawning (empfohlen) verwenden PassengerMaxPreloaderIdleTime 0
, können Sie hinzufügen PassengerPreStart
, um den zusätzlichen Vorteil eines sofortigen Starts zu erhalten.
Vielen Dank an die Helden von phusion.nl !