Apache-bench-environment-setup

提供:Dev Guides
移動先:案内検索

Apacheベンチ-環境設定

この章では、VPSでApache Benchの環境を設定する方法を説明します。

システム要件

  • メモリ-128 MB
  • ディスク容量-最小要件なし
  • オペレーティングシステム-最小要件なし

Apache Benchのインストール

Apache Benchはスタンドアロンアプリケーションであり、Apache Webサーバーのインストールに依存しません。 以下は、Apache Benchをインストールする2段階のプロセスです。

  • ステップ1 *-パッケージデータベースを更新します。
# apt-get update

端末コマンドの前の記号#は、rootユーザーがそのコマンドを発行していることを意味することに注意してください。

  • ステップ2 *-Apache Benchにアクセスするには、apache2 utilsパッケージをインストールします。
# apt-get install apache2-utils

Apache Benchがインストールされました。 同じVPSでホストされているWebアプリケーションをテストする場合は、Apache Webサーバーのみをインストールするだけで十分です-

# apt-get install apache2

ApacheユーティリティであるApache Benchは、Apache Webサーバーのインストール時に自動的にインストールされます。

Apache Benchインストールの検証

Apache Benchのインストールを確認する方法を見てみましょう。 次のコードは、インストールの検証に役立ちます-

# ab -V

出力

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

上記のターミナル出力が表示されたら、Apache Benchが正常にインストールされたことを意味します。

特権Sudoユーザーの作成

安全性の観点から、システム管理者がrootとして作業する代わりにsudoユーザーを作成することをお勧めします。 私たちは目的のために、テストという名前のテストユーザーを作成します-

# useradd -m -d/home/test -g sudo test

新しいユーザーのパスワードを設定しましょう-

# passwd test

システムは、ユーザーテスト用の新しいパスワードの入力を求めます。 本番サーバーに展開するのではなく、テストするだけなので、簡単なパスワードを入力できます。 通常、sudoコマンドは、sudoユーザーパスワードの入力を求めます。プロセスが煩雑になるため、複雑なパスワードを使用しないことをお勧めします。

出力

Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Apache.org Webサイトのテスト

このセクションでは、Apache.org Webサイトをテストします。 最初にsudoユーザーテストに切り替えましょう-

# su test

まず、Apache組織のWebサイトhttps://www.apache.org/をテストします。 私たちは最初にコマンドを実行し、次に出力を理解します-

$ ab -n 100 -c 10 https://www.apache.org/

ここで、*-n *は、ベンチマークセッションで実行するリクエストの数です。 デフォルトでは、通常、非代表的なベンチマーク結果につながる単一の要求を実行します。

また、*-c *は同時実行性であり、一度に実行する複数のリクエストの数を示します。 デフォルトは一度に1つのリクエストです。

そのため、このテストでは、Apache BenchはApache組織サーバーに対して同時実行10で100件のリクエストを行います。

出力

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.apache.org (be patient).....done

Server Software:        Apache/2.4.7
Server Hostname:        www.apache.org
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:         /
Document Length:        58769 bytes

Concurrency Level:      10
Time taken for tests:   1.004 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5911100 bytes
HTML transferred:       5876900 bytes
Requests per second:    99.56 [#/sec] (mean)
Time per request:       100.444 [ms] (mean)
Time per request:       10.044 [ms] (mean, across all concurrent requests)
Transfer rate:          5747.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       39   46  30.9     41     263
Processing:    37   40  21.7     38     255
Waiting:       12   15  21.7     13     230
Total:         77   86  37.5     79     301

Percentage of the requests served within a certain time (ms)
  50%     79
  66%     79
  75%     80
  80%     80
  90%     82
  95%     84
  98%    296
  99%    301
 100%    301 (longest request)

私たちの最初のテストを実行すると、このコマンドの使用パターンは次のように簡単に認識できます-

# ab [options .....]  URL

どこで、

  • ab -Apache Benchコマンド
  • options -実行する特定のタスクのフラグ
  • URL -テストするパスURL

出力値を理解する

abによって返されるさまざまな出力値を理解するには、さまざまなメトリックを理解する必要があります。 ここにリストがあります-

  • サーバーソフトウェア-最初に成功した戻りのHTTPヘッダーで返されるWebサーバーの名前です。
  • サーバーのホスト名-コマンドラインで指定されたDNSまたはIPアドレスです。
  • サーバーポート-abが接続しているポートです。 コマンドラインでポートが指定されていない場合、httpの場合は80、httpsの場合は443がデフォルトになります。
  • * SSL/TLSプロトコル*-これは、クライアントとサーバーの間でネゴシエートされるプロトコルパラメーターです。 これは、SSLが使用されている場合にのみ出力されます。
  • ドキュメントパス-これは、コマンドライン文字列から解析されたリクエストURIです。
  • ドキュメント長-最初に正常に返されたドキュメントのバイト単位のサイズです。 テスト中にドキュメントの長さが変わると、応答はエラーと見なされます。
  • 同時実行レベル-これは、テスト中に使用された同時クライアント(Webブラウザーに相当)の数です。
  • テストの所要時間-これは、最初のソケット接続が作成されてから最後の応答が受信されるまでにかかった時間です。
  • Complete Requests -受信した成功した応答の数。
  • 失敗したリクエスト-失敗と見なされたリクエストの数。 数がゼロよりも大きい場合、接続、読み取り、不適切なコンテンツの長さ、または例外のために失敗した要求の数を示す別の行が印刷されます。
  • 合計転送-サーバーから受信した合計バイト数。 この数は、基本的には回線を介して送信されたバイト数です。
  • * HTML転送*-サーバーから受信したドキュメントバイトの総数。 この数には、HTTPヘッダーで受信したバイトは含まれません
  • Requests per second -これは1秒あたりのリクエスト数です。 この値は、リクエスト数を合計所要時間で割った結果です。
  • リクエストごとの時間-リクエストごとの平均時間。 最初の値は式の同時実行*所要時間* 1000/完了で計算され、2番目の値は式の所要時間* 1000/完了で計算されます
  • 転送レート-数式totalread/1024/timetakenによって計算された転送レート。

負荷テスト出力の迅速な分析

abコマンドからの出力値の見出しについて学んだので、最初のテストの出力値を分析して理解してみましょう-

  • Apache組織は独自のWebサーバーソフトウェアを使用しています-Apache(バージョン2.4.7)
  • サーバーはhttpsのためにポート443でリッスンしています。 httpだったら、80(デフォルト)だったでしょう。
  • 転送されるデータの合計は、100リクエストで58769バイトです。
  • テストは1.004秒で完了しました。 失敗したリクエストはありません。
  • 秒あたりのリクエスト数-99.56。 これはかなり良い数と考えられています。
  • 要求ごとの時間-100.444ミリ秒(10の同時要求の場合)。 したがって、すべてのリクエストで、100.444 ms/10 = 10.044 msです。
  • 転送速度-1338.39 [Kバイト/秒]を受信しました。
  • 接続時間の統計では、多くのリクエストが数秒間待機する必要があることがわかります。 これは、リクエストを待機キューに入れているApache Webサーバーが原因である可能性があります。

最初のテストでは、別のサーバーでホストされているアプリケーション(つまり、www.apache.org)をテストしました。 チュートリアルの後半では、abテストを実行するサーバーと同じサーバーでホストされているサンプルWebアプリケーションをテストします。 これは、学習とデモンストレーションを簡単にするためです。 理想的には、正確な測定のためにホストノードとテストノードは異なる必要があります。

abをよりよく学習するには、このチュートリアルを進めるときに、出力値がさまざまなケースでどのように変化するかを比較して観察する必要があります。

Apacheベンチの出力のプロット

ここでは、関連する結果をプロットして、リクエストの数が増えるにつれてサーバーがどれだけの時間を要するかを確認します。 そのために、前のコマンドで -g オプションを追加し、その後にab出力データが保存されるファイル名(ここではout.data)を追加します-

$ ab -n 100 -c 10 -g out.data https://www.apache.org/

プロットを作成する前に、 out.data を見てみましょう-

$ less out.data

出力

starttime       seconds ctime   dtime   ttime   wait
Tue May 30 12:11:37 2017        1496160697      40      38      77      13
Tue May 30 12:11:37 2017        1496160697      42      38      79      13
Tue May 30 12:11:37 2017        1496160697      41      38      80      13
...
*out.data* ファイルの列ヘッダーを理解しましょう-
  • starttime -これは、コールが開始された日時です。
  • seconds -starttimeと同じですが、Unixタイムスタンプ形式です(date -d @ 1496160697はstarttime出力を返します)。
  • ctime -これは接続時間です。
  • dtime -これは処理時間です。
  • ttime -これは合計時間です(ctimeとdtimeの合計、数学的にはttime = ctime + dtime)。
  • wait -これは待機時間です。

これらの複数のアイテムが互いにどのように関連しているかを視覚的に視覚化するには、次の画像を見てください-

複数のアイテム

端末で作業している場合、またはグラフィックが利用できない場合は、 gnuplot が最適なオプションです。 次の手順を実行することで、すぐに理解できます。

gnuplotをインストールして起動します-

$ sudo apt-get install gnuplot
$ gnuplot

出力

G N U P L O T
Version 4.6 patchlevel 6    last modified September 2014
Build System: Linux x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others

gnuplot home:     http://www.gnuplot.info
faq, bugs, etc:   type "help FAQ"
immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'qt'
gnuplot>

端末上で作業しており、グラフィックが利用できないと想定しているため、端末自体にASCIIで出力するダム端末を選択できます。 これは、このクイックツールでプロットがどのように見えるかを知るのに役立ちます。 ここで、ASCIIプロット用の端末を準備しましょう。

gnuplot> set terminal dumb

出力

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

これで、gnuplotターミナルはASCIIプロットの準備ができたので、 out.data ファイルからデータをプロットしましょう-

gnuplot> plot "out.data" using 9  w l
  • 出力 *
  1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
       +      +      +     +      +      +      +"out.data" using 9* **** *+
       |                                                                   |
  1200 ++                      * *******************************************
       |     ****************** *|
  1000 ++   * ++
       | *|
       |    * |
   800 ++ *++
       |   * |
       | *|
   600 ++  * ++
       | *|
       |   * |
   400 ++ *++
       |   * |
   200 ++ *++
       |   * |
       +****  +      +     +      +      +      +      +     +      +      +
     0 ++-----+------+-----+------+------+------+------+-----+------+-----++
       0      10     20    30     40     50     60     70    80     90    100

要求の数に対して、9列目から合計時間(ミリ秒単位)のttimeをプロットしました。 最初の10個のリクエストでは、合計時間が約100ミリ秒でしたが、次の30個のリクエスト(10 ^ th ^から40 ^ th ^)では、1100ミリ秒に増加しました。 プロットは、 out.data によって異なる必要があります。