是非に及ばず

プログラミングに関する話題などを書いていきます(主にRailsやAndroidアプリ開発について)

PassengerMaxRequestsとPassengerPoolIdleTimeの関係について

PassengerMaxRequestsとPassengerPoolIdleTimeに関する個人的なメモ。
とりあえず、今自分が使用している設定はこちら。お決まりの3行はここでは省略する。

PassengerUseGlobalQueue on
PassengerMaxPoolSize 30
PassengerMaxInstancesPerApp 0
PassengerMaxRequests 0
PassengerPoolIdleTime 120
RailsAutoDetect off
RailsFrameworkSpawnerIdleTime 86400
RailsAppSpawnerIdleTime 86400

ここから本題。
PassengerMaxRequestsとは、リクエストをいくつ処理したらプロセスを終了させるかを決めるものだ。
ちなみに初期値は0=無制限となっている。

  • 例1(ちょっと極端な例)
PassengerMaxRequests 5
PassengerPoolIdleTime 120

この場合、Passengerの各インスタンスはリクエストを5個処理したらプロセスを終了する。
つまり、PassengerPoolIdleTimeは事実上、無視される。
(120秒間に5回のアクセスもないというなら別だが)

  • 例2(PassengerMaxRequestsは無制限)
PassengerMaxRequests 0
PassengerPoolIdleTime 120

この場合は、PassengerPoolIdleTimeのみが適用される。
PassengerMaxRequestsを設定しない場合は、0を指定した場合と同様に扱われるので、上記の例は以下と同じだ。

PassengerPoolIdleTime 120

通常は、例2を使うほうが良いと思う。
でも、サーバのスペックが低いとか、メモリが少ないから普段はプロセスを節約したいなどの状況次第では、後者の設定もありだと思う。
Passengerの各インスタンスの終了するタイミングが分かりやすいという事もあるし。