87

Phusion Passenger のバンドワゴンに飛び乗るために、小さな Rails アプリ用のステージングサーバーをセットアップしてテストを行いました。

これまでのところ、非常に使いやすく、アプリのインストール/構成と展開が簡単になります. 問題は、私たちが使用しているサイトがあまりアクセスされず、バックグラウンドでサーバーがシャットダウンしているように見えることです。つまり、誰かがサイトにアクセスすると、リクエストを処理するために新しいサーバーを起動するまで、非常に長い待ち時間があります。ドキュメントを読み、かなりの数の異なるセットアップ (smart/smart-lv2 モード、passengeridletime など) を試しましたが、まだ本当の解決策は見つかりませんでした。

Google の検索結果を調べても、実際に有用な情報を見つけることができません。現在、サーバーの実行を維持するために、頻繁にリクエストを行う cron ジョブがあります。

他の誰かがこの問題を経験していますか?修正のためのアドバイスはありますか?

4

7 に答える 7

120

何が起こっているかというと、アプリケーションおよび/または ApplicationSpawners がタイムアウトのためにシャットダウンしています。新しいリクエストを処理するために、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 はアプリケーションの 1 つのコピーを常にメモリに保持します (Apache 起動後の最初のリクエストの後)。個々Applicationのリスナーはforkこのコピーから作成されます。これは非常に安価な操作です。アプリケーションがリスナーを生成する必要があったかどうかを判断できないほど迅速に発生します。

アプリがスマート スポーンと互換性がない場合は、大きな PassengerPoolIdleTime を保持し、curl と cronjob または monit などを使用して定期的にサイトにアクセスして、リスナーが確実に存続するようにすることをお勧めします。

Passenger User Guideは、これらおよびその他の構成オプションの優れたリファレンスです。

編集: アプリがスマート スポーンと互換性がない場合、非常に便利な新しいオプションがいくつかあります

# 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のヒーローたちに感謝します!

于 2009-05-12T16:11:47.667 に答える
41

この質問に出くわしたnginxサーバーユーザーがいる場合に備えて、「PassengerMaxRequests」と「PassengerStatThrottleRate」の両方のディレクティブはnginxに変換されません. ただし、他の人は次のことを行います。

rails_spawn_method smart;
rails_app_spawner_idle_time 0;
rails_framework_spawner_idle_time 0;
passenger_pool_idle_time 1000;

チッ!

EDITrails_spawn_methodはパッセンジャー 3 では非推奨です。代わりに使用します

passenger_spawn_method smart; 

他のすべては日付までちょうどいいです。

于 2010-02-24T20:24:20.007 に答える
4

PassengerMinInstances も使用できます。

http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances

これは PassengerPreStart と組み合わせることができます

于 2011-02-15T23:07:32.133 に答える
2

RE:

# Additionally keep a copy of the Rails framework in memory. If you're 
# using multiple apps on the same version of Rails, this will speed up
# the creation of new RailsAppSpawners. This isn't necessary if you're
# only running one or 2 applications, or if your applications use
# different versions of Rails.
RailsFrameworkSpawnerIdleTime 0

追加するだけで、役に立つかもしれません。

現在のリリースのデフォルトのspawnメソッドは「smart-lv2」です。これはフレームワークスポーナーをスキップするため、spawnメソッドを明示的に「smart」に設定しない限り、フレームワークスポーナータイムアウトを設定しても効果はありません。

ソース: http: //groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli = 1

于 2009-05-13T07:25:25.427 に答える
1

私もこの問題を抱えていましたが、このファイルへの書き込み権限がなかったため、乗客の設定を変更できませんでした。アプリの応答を高速に保つツール(http://www.wekkars.com )を見つけました。多分これはあなたのための解決策にもなり得ます。

于 2012-03-13T14:18:36.730 に答える
1

ホストが私のような共有サーバーである場合、設定を変更できず、cron ジョブでスタックします。

于 2009-05-12T21:04:12.900 に答える
0

乗客のバージョンを確認してください。<string>古いバージョンでは RailsS​​pawnMethodでした。

もしそうなら (私の記憶が正しければ)、すべての構成ディレクティブで Passenger を Rails に置き換えるか、古いパッセンジャー ドキュメントを探して詳細を確認してください。

于 2011-12-15T11:30:02.943 に答える