Apache HTTPサーバーを使ったRailsアプリケーションにおけるPassengerの設定

Passengerのコマンド

Passengerの再起動コマンドがVer. 5から変更されている。

これまで

現在

Passengerの状態確認コマンド

Passengerのメモリ状況確認コマンド

ApacheでのPassengerのログの保存場所

Apacheを利用している場合、ApacheのerrorログにPassengerのログは出力される。

ApacheでのPassengerの設定

PassengerMaxPoolSize

1つのサーバーで立ち上げるWorkerプロセスの最大値。マルチスレッドモデルを使わない場合、Passengerが同時に処理することができるリクエスト数となる。サーバーのメモリが足りない場合は数値を下げる。デフォルトは6。下記例では、計4プロセスが起動している。

PassengerMaxInstancesPerApp

1つのアプリで立ち上げるWorkerプロセスの最大値。デフォルトは0(無制限)。

PassengerMaxPreloaderIdleTime

Workerの作成・破棄を行うSpawnerプロセスがShutdownするまでのidle時間。デフォルトは300秒であり、その間にWorkerプロセスに変動がなければshutdownされる。

PassengerStartTimeout

Workerプロセスの開始に失敗とする秒数。ここで設定した秒数以上に、Workerプロセスの開始に時間がかかるとタイムアウトする。デフォルトは90秒。

PassengerMaxRequests

Workerプロセスが再起動するリクエスト数の最大値。設定したリクエスト数を処理するとWorkerプロセスが再起動する。メモリリークを起こしている場合は設定するべき。

PassengerStatThrottleRate

設定ファイル(config/envrironment.rb)や再起動ファイル(restart.txt)をチェックする間隔。0の場合は各リクエストを処理するタイミングで行う。秒数を指定した場合はその秒数毎にチェックする。デフォルトは10秒。

PassengerPreStart

リクエストがなくてもPassengerを起動させるか否か。URLを指定すると、アクセスがなくてもApache起動時にアプリケーションを事前に起動する。

PassengerHighPerformance

onに設定すると少し高速化されるがmod_rewriteやmod_autoindexなどのモジュールが使えなくなる。

RailsPoolIdleTime

短すぎるとインスタンスの生成・終了が頻繁に行われてしまい、レスポンスが悪化する。逆に大きすぎるとメモリを長時間占有されることになり、メモリリークの原因となる。ユーザーのWebサイト上の平均滞在時間の2倍程度が目安。例えば、ユーザーの平均滞在時間が5分だとすると、その倍の10分である600秒に設定するのが推奨される。デフォルトでは120秒。

参考資料

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)
サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

Apache Passengerの設定項目について調べた

Configuration reference for Passenger + Apache