[解決済み] Phusion PassengerとRailsを使用した場合のサーバーの初期起動が遅い
質問
Phusion Passengerのバンドワゴンに乗るために、私たちは小さなRailsアプリのステージングサーバをセットアップしてテストしています。
これまでのところ、Phusion Passenger は非常に使い勝手がよく、アプリのインストールや設定、デプロイを簡単に行うことができます。問題は、私たちが使用しているサイトがあまり頻繁にヒットせず、バックグラウンドでサーバーをシャットダウンしているように見えることです。つまり、誰かがサイトにアクセスすると、リクエストを処理するために新しいサーバーを立ち上げるまで、非常に長い待ち時間が発生します。ドキュメントを読み、かなり多くの異なるセットアップ (smart/smart-lv2 モード、passengeridletime など) を試しましたが、まだ真の解決策は見つかっていません。
Google の検索結果を徹底的に調べた後、有用な情報を見つけることができません。現在、サーバーを稼働させ続けるために、頻繁にリクエストを行う cron ジョブがあります。
他にこの問題を経験している人はいますか、また、修正のためのアドバイスはありますか。
どのように解決するのですか?
アプリケーションまたは 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
smart"スポーンモードを使用し、PassengerMaxPreloaderIdleTimeをオフにすることで、Passengerは常に(Apache起動後の最初のリクエスト以降)メモリ内にアプリケーションのコピーを1つ保持します。個々の
Application
リスナーは
fork
リスナーはこのコピーから生成されます。これは超安価な操作です。これは超安全な操作で、アプリケーションがリスナーを生成しなければならないかどうかがわからないほど素早く行われます。
アプリケーションがスマート・スポーンに対応していない場合は、大きな PassengerPoolIdleTime を維持し、curl と cronjob または monit を使用して定期的にサイトにアクセスし、リスナーが生存していることを確認することをお勧めします。
その Passenger ユーザー ガイド は、これらの設定オプションやその他の設定オプションに関する素晴らしいリファレンスです。
編集 : もしあなたのアプリがスマート・スポーンに対応していない場合、いくつかの方法があります。 新しいオプションがあります。 があります。
# 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 !
関連
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み】bcrypt LoadError: Cannot load such file
-
[解決済み] pg gem をインストールしようとすると 'libpq-fe.h' ヘッダが見つからない
-
[解決済み] Railsです。NameError: 初期化されていない定数
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] Herokuの問題 : あなたが探しているページは存在しません。
-
[解決済み] bundle install --without production は何をするのですか?
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] Ruby on rails アプリで ES6 (ES2015) を使用するにはどうすればよいですか?
-
[解決済み] Ruby on Rails の新規セットアップ : "Expected string default value for '--rc'; got false (boolean)".
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】修正方法:エラー:'<ファイル名>'にチェックアウトされたコミットがない fatal: コマンドプロンプトで "git add ." を入力するとファイルの追加に失敗する
-
[解決済み】TypeError: SymbolからIntegerへの暗黙の変換がない。
-
[解決済み] Railsサーバーがポートはすでに使用されていると言う、そのプロセスを殺すにはどうすればよいですか?
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Rails ExecJS::ProgramError in Pages#home?
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] rails consoleを起動するとRailsのイニシャライザーが呼ばれる?
-
[解決済み] railsでcheck_boxをcheckedにする方法は?
-
[解決済み] Railsコンソール:リロード!モデルファイルの変更が反映されない?考えられる理由は何でしょうか?