2

500 MB の Slicehost VPN にデプロイされた単純な Rails アプリがあります。アプリを使っているのは私だけです。ラップトップで実行すると、十分に高速です。しかし、デプロイされたバージョンは非常に遅いです。ログイン画面のロードには 6 ~ 10 秒かかります。

なぜこんなに遅いのか知りたいです。それは私のコードですか?(ローカルの方がはるかに高速なので、そうは思わないでください。しかし、多分です。) Slicehost のサーバーが過負荷になっているのでしょうか? インターネットですか?

この問題の原因を絞り込むのに役立つテクニックや一連の手順を誰かが提案できますか?


アップデート:

言い忘れすみません。Phusion Passenger (AKAmod_railsまたはmod_rack) を使用して CentOS 5 で実行しています。

4

10 に答える 10

5

初めてロードしたときに遅い場合は、おそらく非アクティブなためにパッセンジャーがプロセスを強制終了したことが原因です。すべての詳細を覚えているわけではありませんが、cron ジョブを使用して少なくとも 1 つのプロセスを維持し、環境のリロードが必要なパッセンジャーで発生する可能性があるこの遅延を回避した人を読んだことを思い出します。

編集:詳細はこちら

具体的には、プールのアイドル時間はデフォルトで 2 分に設定されています。これは、乗客が 2 分間アイドル状態になった後、次のリクエストに対応するために環境をリロードする必要があることを意味します。

于 2009-03-25T12:29:41.117 に答える
4

まず、サーバーからの応答が特に遅いかどうかを調べます。Firefox と Firebug プラグインを使用して、各コンポーネント (JavaScript とグラフィックスを含む) のダウンロードにかかる時間を確認します。メイン ページ自体に常に時間がかかっていると仮定すると、アプリケーションのプロファイリングを開始できます。優れたプロファイラーを見つける必要があります。私は実際に Ruby on Rails で作業していないため、提案することはできません。いくつかのオプションについては、google の「profile ruby​​ on rails」を参照してください。

YenTheFirst が指摘しているように、使用しているサーバー ソフトウェアと構成がスローダウンに寄与する可能性がありますが、A) slicehost はそれを選択しません。Slicehost は、専用マシンとして扱うことができる非常に生のサーバー「スライス」を提供するだけなので、選択します。 . B) CGI として実行されているという理由だけで、すぐに実行されるスクリプトが突然 6 秒かかることはほとんどありません。何か他のことが起こっているに違いありません。使用している RAM の量を確認してください: スワップに入っていますか? ログインが遅いのは、最初にヒットしたときだけで、起動の問題を示していますか、それとも常に遅いですか? 静的コンテンツの提供は遅いですか? これは、ネットワークの問題 (Slicehost 側またはローカル ネットワークのいずれか) によって速度が低下していることを意味する傾向があります。

あなたが「十分速い」と言うとき、あなたは漠然としています: ラップトップ版は Slicehost 6 に 1 秒かかりますか? ラップトップがまともな場合、それはまったく驚くべきことではありません.結局のところ、スライスが安い理由は、それらが完全なサーバーの一部であるためです. 最近のラップトップの両方のコアとは対照的に、Slicehost ではおそらく 8 コアのマシンの 1/32 を使用しています。Slicehost のコアは高速ですが、1/4 のコアと比較すると、ラップトップはスクリーマーになる可能性があります。:)

于 2009-03-25T06:03:17.537 に答える
3

遅さがどこにあるのか特定してみてください

1/ アプリケーションが遅い、またはインフラストラクチャ (ネットワーク + Web サーバー)

  • Web サーバーに静的ファイルを配置し、ブラウザからアクセスします

2/ 速い場合は、アプリケーションとサーバーの構成に問題がある可能性があります。

  • データベースへのアクセスが遅い
  • simpel ループのあるページを試してみてください: 遅いですか?

3/ 遅い場合は、おそらくインフラストラクチャです。確認してもいい:

  • 悪いネットワーク接続: パケット キャプチャを行い (たとえば Wireshark を使用)、再送信、重複パケットなどを探します。
  • DNS 解決が遅い?
  • サーバーの構成が間違っていますか?
于 2009-03-25T22:36:32.733 に答える
1

500MBのローカル仮想マシンを実行することをお勧めします。クライアントとサーバーのやり取りをたくさん行っていますか?WANを介した遅延は重要です

于 2009-03-25T15:38:10.697 に答える
1

DB に大量のデータがありますか? 適切なすべての列にインデックスを作成したことを再確認します。これにより大きな違いが生じる可能性があるためです。ローカルの開発システムでは、おそらく 500 MB のスライスよりも多くのメモリがあるため、インデックスのない大きなテーブルがある場合、DB の実行が大幅に遅くなります。MySql でスロー クエリ ロガーを実行して、インデックスのない列を特定することもできます。

それ以外は、はい-最近サイトを使用していない場合は、乗客がプロセスをスプールする必要があります. この場合、2 回目、特に 3 回目以降のページ読み込みで速度が大幅に向上するはずです。

于 2009-03-25T14:04:12.263 に答える
1

RPM (無料の「ライト」バージョンもあります) や New Relic のTune Upをチェックしてみてください。

于 2009-03-25T22:52:23.087 に答える
1

Slicehost はそれを提供するために何を使用していますか? 高速なオプションは次のようなものです: Mongrel、または apache の mod_rails (パッセンジャー phusion などとも呼ばれます) これらは、Rails アプリのインスタンスを実行する専用サーバー (またはサーバーへのプラグイン) です。

ホストがそれを使用していない場合は、おそらくデフォルトで CGI になっています。Rails には、ページを提供する単純な CGI スクリプトが付属していますが、ページごとにアプリをリロードします。

(編集: あなたのアプリが /webapp_directory/public/dispatch.cgi の CGI から実行されている可能性が最も高いと思います。これが遅さの原因です。これは多くのホストでデフォルトの展開になる傾向があるため、追加の設定は必要ありませんが、パフォーマンスは良くありません)

ホストが「Fast CGI」をサポートしている場合、rails もそれをサポートします。Fast CGI は CGI セッションを開き、それを複数のページで開いたままにするため、パフォーマンスは大幅に向上しますが、Mongrel や mod_rails ほどではありません。

第二に、それは「生産」または「開発」モードですか?簡単に確認する方法は、エラーが発生しているアプリ内のページに移動することです。スタック トレースが表示される場合は、開発モードであり、運用モードよりも低速です。Mongrel と mod_rails には、アプリケーションを本番モードで実行するか開発モードで実行するかを決定するスタートアップ オプションがあります。

最後に、何らかの理由でデータベースが遅い場合、それも大きなボトルネックになります。本番モードで適切なデプロイメント (Mongrel/mod_rails/etc.) がある場合は、それを調べてみてください。

于 2009-03-25T05:24:41.217 に答える
0

SSH でログインするときに「top」を実行して、どのプロセスが重いかを確認できます。ログ記録にも問題がある場合は、Slicehost マネージャーで統計情報を取得してみてください。

MySQL のせいであることがわかった場合は、生成できるサーバーの数を減らすことを検討してください。

512 は Rails アプリケーションには適しているようです。設定が間違っていないか確認する必要があるかもしれません。

于 2009-04-19T23:40:13.680 に答える
0

FireFox を使用して localhost テストを行っている場合 (または LAN 上でさえ)、network.dns.disableIPv6 設定を編集してみてください。

アドレス バーに about:config と入力し、network.dns.disableIPv6 をフィルター処理して、ダブルクリックして true に設定します。

このバグは主に Vista OS から報告されていますが、他にもいくつか報告されています。

于 2009-04-06T15:10:28.287 に答える
0

CPU 時間は、Xen 仮想化システムを使用する Slicehost によって保証されているため、そうではありません。他の回答はありません。申し訳ありません。ページにアクセスしようとしているときに、コンソールで「トップ」を試すことができます。

于 2009-03-25T05:22:10.083 に答える