タイムアウトが発生したため、アプリケーションまたはApplicationSpawnerがシャットダウンしています。新しいリクエストを処理するために、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は常に(Apacheを起動した後の最初のリクエストの後)アプリケーションの1つのコピーをメモリに保持します。個々の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はApacheのロード直後に3つのインスタンスを起動し、常に少なくとも3つのインスタンスを起動したままにするため、ユーザーが遅延することはほとんどありません。
または、PassengerMaxPreloaderIdleTime 0
すでにスマートスポーン(推奨)を使用している場合は、追加PassengerPreStart
してすぐに起動できるという追加の利点を得ることができます。
phusion.nlのヒーローに感謝します!