16

ApacheBenchの使用方法と自分のWebサイトのベンチマーク方法を理解しようとしています。デフォルトのサイトプロジェクトをインストールしました(ASP.NET MVCですが、.NETを使用していない場合は、読むのをやめないでください)。

何も変更しませんでした。新しいプロジェクトを追加します。confurationをRELEASEに設定します。デバッグなしで実行します。(つまり、LIVEモードです)。はい、これは組み込みのWebサーバーであり、製品グレードのIISやApacheなどではありません。

結果は次のとおりです:-

C:\Temp>ab -n 1000 -c 1 http://localhost:50035/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        ASP.NET
Server Hostname:        localhost
Server Port:            50035

Document Path:          /
Document Length:        1204 bytes

Concurrency Level:      1
Time taken for tests:   2.371 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      1504000 bytes
HTML transferred:       1204000 bytes
Requests per second:    421.73 [#/sec] (mean)
Time per request:       2.371 [ms] (mean)
Time per request:       2.371 [ms] (mean, across all concurrent requests)
Transfer rate:          619.41 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.1      0      16
Processing:     0    2   5.5      0      16
Waiting:        0    2   5.1      0      16
Total:          0    2   5.6      0      16

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%     16
  95%     16
  98%     16
  99%     16
 100%     16 (longest request)

C:\Temp>

今、私は私が何を見るべきか正確にはわかりません。

まず、1秒あたりのリクエスト数を確認します。したがって、300 reqs / secを処理する必要がある場合、これは、平均421 reqs / secを処理すると言っているのでしょうか?

次に、同時追加を追加する理由は何ですか?のように、1つの同時実行で1000ヒットがある場合、2つの同時実行で500ヒットとどのように異なりますか?他のリクエストをブロックするコードがあるかどうかをテストするためですか?

最後に、私が注意しなければならない結果から私が見逃した重要なことはありますか?

ありがとう :)

4

2 に答える 2

17

同時追加を追加する理由は何ですか?のように、1つの同時実行で1000ヒットがある場合、2つの同時実行で500ヒットとどのように異なりますか?他のリクエストをブロックするコードがあるかどうかをテストするためですか?

それは少しです、はい:あなたのアプリケーションはおそらく並行性が問題を引き起こす可能性のあることをしているでしょう。

いくつかの例:

  • ページがファイルにアクセスしようとしています-プロセスでファイルをロックします; つまり、別のページが同じファイルにアクセスする必要がある場合、最初のページがそのファイルでの作業を終了するまで待機する必要があります。
  • データベースアクセスについてもまったく同じです。1つのページがデータベースに書き込んでいる場合、何らかのロックメカニズムがあります(DBMSに応じて、テーブルベース、行ベースなど)。

1つの同時実行でテストすることはOKです...あなたのウェブサイトが同時に複数のユーザーを持たない限り; これはかなり現実的ではありません、私はあなたに願っています。


本番環境で同時にサイトにアクセスするユーザーの数を検討し、同時実行性を調整する必要があります。サイトで同時に5人のユーザーがいるからといって、abと5の同時実行でテストする必要があるわけではないことを覚えておいてください。

  • 実際のユーザーは、各リクエストの間に数秒待機します(ページを読んだり、リンクをクリックしたりする時間など)
  • abはまったく待機しません。ページが読み込まれるたびに(つまり、リクエストが終了するたびに)、別のリクエストが起動されます。


また、他の2つのこと:

  • abは1ページのみをテストします-実際のユーザーはWebサイト全体をナビゲートします。これにより、1ページのみをテストする場合には発生しない同時実行の問題が発生する可能性があります。
  • abは1ページのみをロードします:外部リソース(CSS、画像、JSなど)を要求しません; つまり、サイトが本番環境にあるときは、実際にはコストがかからない場合でも、他の多くのリクエストが発生することになります。

補足として: siegeJmeterOpenSTAなどのはるかに完全なテストを実行できる他のツールを確認することをお勧めします:abは、何かがページを最適化しているかどうかを測定する場合に非常に便利です; しかし、サイトの「実際の」使用法をシミュレートしたい場合は、それらがはるかに適応されます。

于 2009-09-13T13:27:18.010 に答える
8

はい、サイトが処理できる1秒あたりのリクエスト数を知りたい場合は、「1秒あたりのリクエスト数」の行を確認してください。あなたの場合、同時実行性が1のabを実行したので、非常に簡単です。各リクエストの平均所要時間は2.371ミリ秒です。それらの421は、次々に、1秒かかります。

サイトの容量を正確に測定するには、並行性を少し試してみる必要があります。複数の要求がIISによって並行して処理されるため、ある程度の同時実行性まではスループットが向上すると予想されます。たとえば、サーバーに複数のCPU/コアがある場合。また、ページが外部IO(中間層サービスまたはDB呼び出し)に依存している場合、CPUは1つの要求を処理でき、別の要求はIOが完了するのを待機しています。ある時点で、リクエスト/秒は同時実行性の増加とともに横ばいになり、レイテンシーが増加するのがわかります。同時実行性をさらに高めると、サーバーがこれらすべての同時要求を処理するためにより多くのリソースを費やす必要があるため、スループット(req / sec)が低下することがわかります。

とはいえ、リクエストの大部分は約2ミリ秒で返されます。これはかなり速いので、DBや中間層の呼び出しに関してはあまり進んでいないと思います。テストの実行中は、システムがCPUで最大になっている可能性があります(または何かが間違っていて、非常に速く失敗します。あなたは確かにabがあなたが意図した応答ページを取得しますか?つまり、あなたがテストしていると思うページは1204バイトの大きさですか?)これは別のポイントをもたらします。特に同時実行性を上げると、ab自体もCPUを消費します。したがって、別のマシンでabを実行する必要があります。

また、サイトが中間層サービスまたはDBに対して外部呼び出しを行う場合は、マシン.configを調整して、IISが割り当てるスレッドの数を最適化する必要があります。http://support.microsoft.com/default.aspx?scid = kb; en-us; 821268

そして、ちょっとした雑学:使用されたタイマーの粒度であるように見えるので、所要時間の統計は約16msの増分で行われます。つまり、回答の80%は0ミリ秒かかりませんでしたが、16ミリ秒未満の時間がかかりました。

于 2009-09-13T23:04:59.247 に答える