2009-05-26 13 views
5

私のRailsアプリへの最初のリクエストは常に遅れています。プロダクションモード に切り替えることは役に立ちません。Railsアプリへの最初のリクエストは非常に遅い

私はmongrelを使用していますが、他のリクエストは許容速度で処理されます。

どうすれば速くできますか?

よろしく

答えて

1

あなたがその最初の要求が処理されるよう、おそらく我々はそれがとても遅い作っているかを把握することができ、ログの内容を投稿した場合。例えば、最初のユーザーがサイト

Booting Mongrel (use 'script/server webrick' to force WEBrick)  
Rails 2.1.0 application starting on http://0.0.0.0:3000  
Debugger enabled  
Call with -d to detach  
Ctrl-C to shutdown server 
** Starting Mongrel listening at 0.0.0.0:3000 
** Starting Rails with development environment... 
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/mime_type.rb:66: warning: already initialized constant CSV 
** Rails loaded. 
** Loading any Rails specific GemPlugins 
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no restart). 
** Rails signals registered. HUP => reload (without restart). It might not work well. 
** Mongrel 1.1.5 available at 0.0.0.0:3000 
** Use CTRL-C to stop. 


Processing SessionsController#new (for 127.0.0.1 at 2009-05-26 12:26:00) [GET] 
    Session ID: de2acf074759026e1ed6205724f547a9 
    Parameters: {"action"=>"new", "controller"=>"sessions"} 
Rendering sessions/new 
Completed in 0.00587 (170 reqs/sec) | Rendering: 0.00298 (50%) | DB: 0.00092 (15%) | 200 OK [http://localhost/] 

にアクセスすると、これは私のログである私は170 REQS /秒は我々のアプリの罰金ですが、他の人がそれは遅いかもしれないと思います。統計から、必要な時間の半分がレスポンスのレンダリングに費やされることがレールに示されています。この場合、ログイン画面のHTMLが生成されます。このリクエストに長時間を要した場合、私の最初のコールポートは、ログイン画面に関連するビューとヘルパーになります。

非常に最初のリクエストで初期化するのに時間がかかるシステムをお持ちで、そんなに卑劣ではないようにして、最初にレールを実行してからcurlで偽のリクエストを送信する独自​​のスタートアッププログラムを作成してみましょう。そうすれば、ユーザーは決して問題を見ることができません。

クリス

+0

あなたのヒントをありがとう。ここに私のログファイルがあります:http://pastie.org/private/ih2mpcmjpofp5jmfsvw 時々、それは私の要求に答えるのに1600ミリ秒よりずっと長く続きます。私は本当に手がかりを持っていません... – Stefan

+1

どのバージョンのレールを使用していますか? 10367msで完了(表示:1572、DB:450)| 200 OK [http:// localhost/search?search = stefan +] 最初のリクエストに答えるのに10秒かかるようです。私は同じクエリ "stefan"の検索がはるかに高速だと思いますか? 別のレコードを見つけるのにどれくらい時間がかかりますか? 最後に、存在しないレコードを検索するのにどれくらい時間がかかりますか? –

1

私たちのアプリケーションは、長い時間に、私たちは、WebSphereでそれらをキックオフ最初の時間を割いてのと同じ理由かもしれません。

WASは、新しいバージョンのアプリケーションがインストールされた(またはWASが再起動された)ときに、コンテナを設定するために多くの初期作業を行う必要があります。私たちが使用

この問題を回避するには、インストールスクリプトを変更することでした、彼らは自動的にすぐに実行していたように、アプリケーションに閲覧(メインページや他のページを選択)するように起動スクリプトをされました。そのようにして、最初の実際のアクセスは最高速度でした。

Rubyでこれをどうやって行うのか、それが可能かどうかはわかりません。あなたはそれを理解しなければなりません。

+0

簡単なスクリプトを使用して、curl/wgetを使用して同じ効果を達成するすべてのレールアプリからページをリクエストすることができます。 – Petesh

1

フルテキスト検索にフェレットを使用していると思いますか?フェレットの接続に初期化に時間がかかることはありますか?あなたのログをチェックすると、dbとviewの両方に通常の時間がかかるようですが、合計は10秒です。だから私はフェレットが問題になるかもしれないと推測しているので、何か他のものでなければなりません。

1

あなたがいるので、それを使用できます(その後、キャッシュ)を必要と プラグインや宝石外部 サービスへの接続を行う

  • の数をロード

    • 独自のページをキャッシュのみ が最初の要求の後に発生すること ない限り、あなたはキャッシュを「ウォーム」

    いずれも、最初のリクエストの応答時間が必然的に長くなります。

  • 0

    おそらく、PassengerPoolIdleTime varをApacheのconf内で調整する必要があります。レールプロセスを決して止めないためには0に設定してください。

    関連する問題