3

私は、MySQL データベースを使用せず、代わりに mongoDB + Redis を使用するという意味で、私にとって珍しい Rails プロジェクトに取り組んでいます。

このアプリは非常にシンプルです。データを mongoDB から Redis に「起動」します。その後、ポイント レールは、主に redis からデータをプルすることで構成されるユーザーからのリクエストを受け取る準備が整います (これ)簡単な計算を行い、データの一部をユーザーに送り返します。これは、運が良ければ、毎秒 1500 ~ 4500 回発生します。

ユーザー軍の力がサーバーに降りかかる前に、ページリクエストを何らかの形で内部的に「シミュレート」する方法があるかどうか疑問に思っていました.rakeタスクを実行して、そのページを1秒間にN回実行するか、そのようなものです。 ?

そうでない場合、その負荷をテストし、ほとんどのユーザーが見ている遅延の大まかなアイデアを得るためにリクエストの時間を計る方法はありますか?

4

1 に答える 1

5

警告

パフォーマンス テストは非常に幅広いトピックであり、適切なツールは多くの場合、必要な結果の種類と品質によって異なります。対処しなければならない問題の 1 つの例として、特定のコントローラー アクションのベンチマーク仕様を作成し、そのメソッドを 1000 回続けて呼び出すとどうなるかを考えてみましょう。これにより、そのコントローラー メソッドのパフォーマンスの良いアイデアが得られるかもしれませんが、同じ redis または mongo クエリを 1000 回実行している可能性があり、その結果がデータベース ドライバーによってキャッシュされている可能性があります。また、これは、Web サーバーが応答し、リクエストの一部である静的アセットを提供するのにかかる時間も無視します (特に、これに関する他のテストがある場合は、これで問題ない可能性があります)。

基本ツール

  • ab、または ApacheBenchは、アプリのスループットと速度をテストするために使用できるシンプルなコマンドライン ツールです。私は通常、Web サーバーで 1000 のリクエストを送信する場合、またはアプリケーションが処理できる同時リクエスト数をテストする場合 (たとえば、mongrel、unicorn、thin、および goliath を比較する場合) に、最初にこれに進みます。すべてのリクエストは同じサーバーから発信されるため、これは少数のリクエストには適していますが、リクエストの数が増えると、テスト マシンのリソース (ネットワーク スタック、CPU、および場合によってはメモリ) によって制限されます。
  • Benchmarkは Ruby の標準クラスであり、プロファイリング情報をすばやく吐き出すのに最適です。Test::UnitRSpecで使用することもできます。簡単なベンチマークを実行するための rake タスクが必要な場合は、おそらくここから開始することをお勧めします
  • mechanize-ページとのやり取りをすばやくスクリプト化するために mechanize使用するのが好きです。Cookie とフォームを処理しますが、デフォルトでは画像などのアセットを取得しません。独自のテストを展開している場合、これは優れたツールになる可能性がありますが、最初に使用するべきではありません。
  • 実際のユーザーがサイトを操作する様子をシミュレートするツールもいくつかあります (ブラウザと同じようにアセットをダウンロードし、複数の異なるユーザーをシミュレートするように構成できます)。最も注目すべきは、The GrinderTsungです。まだ開発中ですが、現在、 tsungを使用したレール負荷テストの自動化を容易にするためにtsung-railsに取り組んでいます。

Rails プロファイリング リンク

于 2012-07-08T06:45:31.787 に答える