Apache-bench-quick-guide
Apacheベンチ-概要
パフォーマンステストは、ビジネスの成功に不可欠であることが証明されています。 パフォーマンスの低いサイトは経済的な損失に直面するだけでなく、時には法的影響をもたらすこともあります。
購入、オンラインテストの受験、請求書の支払いなどの重要なオンラインインタラクションで、パフォーマンスの低い信頼性の低いサイトに我慢したい人はいません。 インターネットは非常に広く利用されているため、選択肢の幅は計り知れません。 顧客を獲得するよりも顧客を失う方が簡単であり、パフォーマンスは重要なゲームチェンジャーです。
負荷テストツールの必要性
負荷テストツールの必要性を理解できれば、それを使用する理由と動機がわかります。 有名なビジネスサイトの中には、多数の訪問者を獲得したときに深刻なダウンタイムに見舞われたものがあります。 EコマースWebサイトは、広告キャンペーンに多額の投資を行いますが、負荷テストには投資しません。 そのため、マーケティングがトラフィックをもたらす場合、最適なシステムパフォーマンスを確保できません。
負荷テストを無視するもう1つのよく知られた例は、WordPress Webサイトでの「接続の確立エラー」です。 したがって、運用環境に展開する前にWebサイトまたはアプリケーションをロードテストすることをお勧めします。 より詳細なテストを実行する前に、プロジェクトのベストケースシナリオをすばやく確立しておくと便利です。
Apache Benchとは何ですか?
Apache Bench(ab)は、HTTP(Hypertext Transfer Protocol)Webサーバーのベンチマークを行うためのApache組織のツールです。 Apache Webサーバーのパフォーマンスを測定するように設計されていますが、同様に優れた他のWebサーバーのテストにも使用できます。 このツールを使用すると、Webサーバーが1秒間に処理できるリクエストの数をすばやく知ることができます。
Apache Benchの機能
Apache Benchの重要な機能と制限を見てみましょう。 機能と制限は以下のとおりです-
- オープンソースソフトウェアであるため、無料で入手できます。
- これは、単純なコマンドラインコンピュータープログラムです。
- プラットフォームに依存しないツールです。 これは、Linux/UnixでもWindowsサーバーでも同様に起動できることを意味します。
- HTTPまたはHTTPSのWebサーバーのみの負荷およびパフォーマンステストを実行できます。
- 拡張可能ではありません。
Apache Benchは、並行性レベル(-cフラグで指定)に関係なく、オペレーティングシステムスレッドを1つだけ使用します。 したがって、大容量サーバーのベンチマークを行う場合、Apache Benchの単一インスタンス自体がボトルネックになる可能性があります。 サーバーに複数のプロセッサコアがある場合、ターゲットURLを完全に飽和させるには、Apache Benchの追加インスタンスを並行して使用することをお勧めします。
予防措置
Apache Benchには、テストの実行中に特定の間隔で同時実行性を高めるためのディレクティブがないことに注意する必要があります。 したがって、abを使用して負荷テストを実行することは、サービス拒否(DOS)攻撃と同等です。 長期間にわたって高負荷テストを行う場合は、VPSサービスプロバイダーに通知して事前の許可を取得することをお勧めします。 適切な時間間隔を割り当てるか、負荷テストタスクのためにノードを移動します。
第二に、VPS(テストノードになる)からApache Benchを学習するためだけに第三者のWebサイトを継続的に長時間テストしている場合、VPSパブリックIPが第三者のWebサイトによってブロックされる可能性がほとんどありません永久に。 その場合、同じIPを使用してそのWebサイトに接続することはできません。 ただし、将来Webサイトに本当に接続したい場合、唯一の解決策は、ターゲットWebサイトのシステム管理者に問い合わせるか、VPSサービスプロバイダーの助けを借りて、異なるIPを使用してサーバーの新しいインスタンスを作成することです。
警告してきましたが、このチュートリアルのすべてのテストは十分に安全であり、システム管理者が一般に「システム乱用」プラクティスと呼ぶものから外れていることを保証します。
Apacheベンチ-環境設定
この章では、VPSでApache Benchの環境を設定する方法を説明します。
システム要件
- メモリ-128 MB
- ディスク容量-最小要件なし
- オペレーティングシステム-最小要件なし
Apache Benchのインストール
Apache Benchはスタンドアロンアプリケーションであり、Apache Webサーバーのインストールに依存しません。 以下は、Apache Benchをインストールする2段階のプロセスです。
- ステップ1 *-パッケージデータベースを更新します。
端末コマンドの前の記号#は、rootユーザーがそのコマンドを発行していることを意味することに注意してください。
- ステップ2 *-Apache Benchにアクセスするには、apache2 utilsパッケージをインストールします。
Apache Benchがインストールされました。 同じVPSでホストされているWebアプリケーションをテストする場合は、Apache Webサーバーのみをインストールするだけで十分です-
ApacheユーティリティであるApache Benchは、Apache Webサーバーのインストール時に自動的にインストールされます。
Apache Benchインストールの検証
Apache Benchのインストールを確認する方法を見てみましょう。 次のコードは、インストールの検証に役立ちます-
出力
上記のターミナル出力が表示されたら、Apache Benchが正常にインストールされたことを意味します。
特権Sudoユーザーの作成
安全性の観点から、システム管理者がrootとして作業する代わりにsudoユーザーを作成することをお勧めします。 私たちは目的のために、テストという名前のテストユーザーを作成します-
新しいユーザーのパスワードを設定しましょう-
システムは、ユーザーテスト用の新しいパスワードの入力を求めます。 本番サーバーに展開するのではなく、テストするだけなので、簡単なパスワードを入力できます。 通常、sudoコマンドは、sudoユーザーパスワードの入力を求めます。プロセスが煩雑になるため、複雑なパスワードを使用しないことをお勧めします。
出力
Apache.org Webサイトのテスト
このセクションでは、Apache.org Webサイトをテストします。 最初にsudoユーザーテストに切り替えましょう-
まず、Apache組織のWebサイトhttps://www.apache.org/をテストします。 私たちは最初にコマンドを実行し、次に出力を理解します-
ここで、*-n *は、ベンチマークセッションで実行するリクエストの数です。 デフォルトでは、通常、非代表的なベンチマーク結果につながる単一の要求を実行します。
また、*-c *は同時実行性であり、一度に実行する複数のリクエストの数を示します。 デフォルトは一度に1つのリクエストです。
そのため、このテストでは、Apache BenchはApache組織サーバーに対して同時実行10で100件のリクエストを行います。
出力
私たちの最初のテストを実行すると、このコマンドの使用パターンは次のように簡単に認識できます-
どこで、
- 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)を追加します-
プロットを作成する前に、 out.data を見てみましょう-
出力
- starttime -これは、コールが開始された日時です。
- seconds -starttimeと同じですが、Unixタイムスタンプ形式です(date -d @ 1496160697はstarttime出力を返します)。
- ctime -これは接続時間です。
- dtime -これは処理時間です。
- ttime -これは合計時間です(ctimeとdtimeの合計、数学的にはttime = ctime + dtime)。
- wait -これは待機時間です。
これらの複数のアイテムが互いにどのように関連しているかを視覚的に視覚化するには、次の画像を見てください-
端末で作業している場合、またはグラフィックが利用できない場合は、 gnuplot が最適なオプションです。 次の手順を実行することで、すぐに理解できます。
gnuplotをインストールして起動します-
出力
端末上で作業しており、グラフィックが利用できないと想定しているため、端末自体にASCIIで出力するダム端末を選択できます。 これは、このクイックツールでプロットがどのように見えるかを知るのに役立ちます。 ここで、ASCIIプロット用の端末を準備しましょう。
出力
これで、gnuplotターミナルはASCIIプロットの準備ができたので、 out.data ファイルからデータをプロットしましょう-
- 出力 *
要求の数に対して、9列目から合計時間(ミリ秒単位)のttimeをプロットしました。 最初の10個のリクエストでは、合計時間が約100ミリ秒でしたが、次の30個のリクエスト(10 ^ th ^から40 ^ th ^)では、1100ミリ秒に増加しました。 プロットは、 out.data によって異なる必要があります。
サンプルアプリケーションのテスト
前の章では、サードパーティのWebサイトをテストするためのApacheベンチの基本的な使用法を理解しました。 このセクションでは、このツールを使用して、独自のサーバーでWebアプリケーションをテストします。 チュートリアルを可能な限り自己完結型に保つために、デモ用にPythonアプリケーションをインストールすることを選択しました。専門レベルに応じて、PHPやRubyなどの他の言語を選択できます。
Pythonをインストールする
通常、PythonはデフォルトでLinuxサーバーにインストールされます。
Bottle Frameworkのインストールと簡単なアプリケーションの作成
Bottleは、Webアプリケーションを作成するためにpythonで書かれたマイクロフレームワークであり、pipはpythonパッケージマネージャーです。 ターミナルに次のコマンドを入力して、ボトルをインストールします-
ここで、小さなボトルアプリケーションを作成しましょう。 そのために、ディレクトリを作成し、その中に移動します-
webappディレクトリ内に新しいPythonスクリプト app.py を作成します-
さて、app.pyファイルに次のコードを書きます-
上記の行を追加したら、ファイルを保存して閉じます。 ファイルを保存したら、Pythonスクリプトを実行してアプリケーションを起動できます-
出力
この出力は、アプリケーションがホスト http://localhost のローカルマシンで実行され、ポート 8080 でリッスンしていることを示しています。
アプリがHTTPリクエストに適切に応答しているかどうかを確認しましょう。 このターミナルは、Bottleアプリケーションのサービスを終了しないと入力を受け取れないため、別のターミナルでVPSにログインする必要があります。 別の端末でVPSにログインした後、新しい端末で次のコードを入力して、アプリケーションに移動できます。
Lynxはコマンドラインブラウザーであり、通常はDebianやUbuntuなどのさまざまなLinuxディストリビューションにデフォルトでインストールされます。 次の出力が表示される場合、アプリが正常に機能していることを意味します。
出力
上記の出力が表示された場合、それはアプリケーションが稼働しており、テストの準備ができていることを意味します。
開発用Webサーバーを使用したアプリケーションのテスト
abにはバグがあり、ローカルホストでアプリケーションをテストできないことに注意してください。 したがって、app.pyファイルでホストをlocalhostから127.0.0.1に変更します。 したがって、ファイルは次のように変更されます-
lynxコマンドを実行したのと同じ端末で次のコマンドを入力して、アプリをテストしましょう-
出力
最初の端末の出力は次のようになります(100回)-
最初のテストと比較して、ab結果のさまざまな値がどのように変化したかを観察できます。
マルチスレッドWebサーバーを使用したアプリケーションのテスト
abの以前のテストでは、BottleフレームワークにバンドルされているデフォルトのWebサーバーを使用しました。
次に、シングルスレッドのデフォルトWebサーバーをマルチスレッドサーバーに変更します。 したがって、 cherrypy や gunicorn などのマルチスレッドWebサーバーライブラリをインストールし、Bottleに使用するように指示してみましょう。 ここでは、デモンストレーションの目的でgunicornを選択しました(他のgunicornも選択できます)-
そして、ファイルを変更します。つまり、デフォルトのWebサーバーからgunicornに変更します-
2番目のターミナルでアプリをテストしてみましょう。
出力
1秒あたりのリクエスト数が493から3252にどのように増加したかを確認します。 これは、gunicornがPythonアプリの実稼働サーバーとして適していることを意味します。
複数のURLを同時にテストする
この章では、複数のURLを同時にテストする方法を学びます。 そのためには、アプリケーションファイルapp.pyを編集して2つのURLを含める必要があります-
単純なシェルスクリプトの作成
これを行うには、複数のab呼び出しを使用してシェルスクリプトを作成します。 ファイルtest.shを作成し、それに次の行を追加します-
上記の行を追加したら、ファイルを保存して閉じます。 ファイルを実行可能にします-
スクリプトを実行しましょう-
繰り返しと明確化の目的を避けるために、ab出力の関連部分のみを示し、以下のように、どの部分が省略されたかをドットで示します。
出力
Apacheベンチの出力をファイルに保存するシェルスクリプト
複数のab呼び出しでシェルスクリプトを作成することにより、Apache Bench出力をファイルに保存できます。 各行の最後に*&; *を配置すると、コマンドがバックグラウンドで実行され、次のコマンドの実行が開始されます。 <filename>を使用して、各URLのファイルに出力をリダイレクトすることもできます。 たとえば、ファイルtest.shは、変更後は次のようになります-
ここで、 test1.txt および test2.txt は、出力データを保存するファイルです。
上記のスクリプトが、それぞれのURLのab出力を含む2つのファイルtest1.txtおよびtest2.txtを作成したことを確認できます-
出力
警戒状況
abを使用している間、警告なしで失敗したテストについて警告する必要があります。 たとえば、間違ったURLをチェックすると、次のようなメッセージが表示される場合があります(ここでポートを意図的に変更しました)。
出力
動的ページのテストの準備
この章では、動的ページのテストに必要な準備を理解します。 サーバー側の動的なWebページは、サーバー側のスクリプトを処理するアプリケーションサーバーによって構築が制御されるWebページです。 Apacheベンチは、サーバー側の動的Webページのロードテストのみ可能です。
同時実行レベルとリクエストの総数
同時実行レベルは、リクエストの総数よりも低くする必要があります。
出力
フラグの使用
このセクションでは、abコマンドでいくつかの重要なフラグを使用する方法について説明します。 用語、オプション、フラグを同じ意味で使用します。
詳細-v
詳細オプションを使用して、失敗したリクエストが複数存在する場合に分析およびデバッグできます。 負荷テストの失敗の一般的な兆候は、テストが非常に高速に終了し、1秒あたりの要求値として適切な数値が得られることです。 しかし、それは間違ったベンチマークになります。 成功または失敗を識別するには、*-v 2 *オプションを使用して、各応答の本文とヘッダーを端末出力にダンプします。 次のコマンドは、ユースケースを示しています-
出力
もちろん、エラーが発生した場合に変数の応答をテストしたり、200以外のHTTPコードを返したりする場合は、*-l *オプションを使用した長さチェックを無視する必要があります。 以降の章でweb2pyアプリケーションを起動するときに、200以外のHTTPがすぐに表示されます。
キープアライブ-k
クライアントがHTTP要求を送信すると、サーバーへの接続が行われ、サーバーが応答を送信し、要求を送信した後に接続が閉じられます。 このサイクルは、リクエストごとに続きます。 ただし、キープアライブ設定(永続的接続とも呼ばれます)では、クライアントは複数の要求と応答を容易にするために、基礎となるTCP接続を開いたままにします。これにより、他の方法では存在する低速でコストのかかる接続初期化時間がなくなります。
可変ドキュメント長-l
Webページが可変長の場合、オプション -l を使用する必要があります。 応答の長さが一定でない場合、Apache Benchはエラーを報告しません。 これは、動的ページに役立ちます。
オプション-rの使用
エラーの受信時にabが終了しないようにするにはどうすればよいですか? オプション -r を使用する必要があります。 このオプションがないと、リクエストがソケットエラーにヒットするとすぐにテストが中断する可能性があります。 ただし、このオプションを使用すると、失敗したエラーの見出しにエラーが報告されますが、テストは最後まで続行されます。
オプション-Hの使用
このオプションは、任意のヘッダー行を追加するために使用されます。 引数は通常、コロンで区切られたフィールドと値のペアを含む有効なヘッダー行の形式です(つまり、「Accept-Encoding:zip/zop; 8bit」)。
オプション-Cの使用
次のセクションでは、Cookie値を使用するオプション( -C オプション)と組み合わせて上記のオプションを使用する方法を詳細に学習します。 -Cオプションは通常、 name = value ペアの形式です。 このフィールドは繰り返すことができます。
ApacheベンチでのセッションCookieの使用
ApacheベンチでCookieを使用する方法を理解するには、Cookieを設定しようとするWebページが必要です。 非常に良い例は、Python Webフレームワークであるweb2pyアプリケーションです。
web2pyのインストール
別のpythonアプリweb2pyをすばやくインストールします。 使用方法の詳細については、link:/web2py/web2py_framework_overview [Web2py Framework Overview]をご覧ください。
通常、PythonはUbuntuおよびDebianサーバーにデフォルトでインストールされます。 したがって、web2pyを正常に実行するための1つの要件がすでに満たされています。
ただし、unzipパッケージをインストールして、ダウンロードするzipファイルからweb2pyのソースファイルを抽出する必要があります-
プロジェクトのWebサイトからweb2pyフレームワークを取得しましょう。 これをホームフォルダにダウンロードします-
これで、ダウンロードしたファイルを解凍して内部に移動できます-
web2pyを実行するために、インストールする必要はありません。 あなたがweb2pyディレクトリの中にいると、次のコマンドを入力してそれを実行することができます-
すべてが成功すると、次の出力が表示され、管理UIのパスワードを選択するように求められます-
ただし、起動されたWebインターフェースはローカルマシンでのみアクセス可能であるという事実に注意する必要があります。
出力から、Webサーバーを停止するには、インスタントターミナルで「CTRL-C」と入力する必要があることを理解できます。 一方、同じVPSに関連する他の端末でweb2pyサーバーを停止するには、コマンドkill -SIGTERM <PID>を挿入できます。ここで、<PID>はweb2pyサーバーのプロセスIDです。この場合は23904。
web2pyからのセッションCookie
ログインしたユーザーのみがページにアクセスでき、ログインページから直接アクセスできない場合は、*-C *フラグを使用できます。 このフラグは、abコマンドのCookieを定義します。 ただし、有効なセッションからセッションID Cookieの値を取得する必要があります。 入手方法は? さまざまなオンラインチュートリアルで、Chrome(またはMozilla)ブラウザー開発者ツールを紹介します。 ただし、テストケースでは、アプリケーションはコマンドラインでのみ使用できるため、lynxブラウザーを使用して値を取得します。
最初にセッションのCookie値を取得します。 別の端末を開き、次のコマンドを入力します-
上記のコマンドに対する応答として、lynxは、下の画像に示すようにweb2pyサーバーからのCookieを受け入れる許可を求めます。
Cookie値を取得したら、abテストを実行します。 そのためには、3番目の端末を開く必要があります(下の画像を参照)-
さて、3番目の端末で-Cフラグを使用しましょう-
出力
上記の出力から、いくつかの点に注意してください。 まず、web2pyはhttps://launchpad.net/rocket[Rocket] Webサーバーを使用します。 また、前述の出力の見出しに加えて、「Non-2xx応答」も取得していることに注意してください。 一般に、Httpプロトコルは応答コードを使用して要求に応答し、200の範囲内のすべては「大丈夫」を意味し、残りは何らかの問題に対応します。 たとえば、400は404 File Not Foundなどのリソース関連のエラーです。 500はサーバーエラーに対応します。 この例では、-Cオプションを使用している場合を除き、どこにもエラーはありません。 既に説明したように、-lオプションを使用して抑制できます。
管理ページの確認
このセクションでは、管理ページを確認する方法を理解します。 比較のために、web2pyアプリケーションの別のURLをテストしましょう-
出力
特に、 http://127.0.0.1:8000/ および http://127.0.0.1:8000/admin のセクション「接続時間」および「処理されたリクエストの割合」の各統計に注意してください。 。 大きな違いがあります。
制限時間オプションの使用
一般に、Timelimitオプションは扱いにくいものです。 manual of abからこれを理解しましょう。
このオプションでテストを実行しましょう。 出力を通過した後の観察に注意します-
出力
出力は、このオプションが -n オプションで指定されたリクエストの数を上書きし、50Kリクエストまで継続することを示していることに注意してください。 ただし、リクエストは非常に高速に処理されたため、abは50kマークが達成されるとすぐに終了しました。この場合、22秒以内(テストにかかった時間の見出しを参照)。
負荷テストを実行する前のチェックリスト
テストを正常に実行し、パフォーマンスを正確に測定するのに役立ついくつかのチェックがあります。 負荷テストを実行する前に、次の条件を考慮してください-
- 追加のPythonモジュールがロードされていないことを確認してください。
- TCP/IPポートの枯渇を回避するには、通常2〜3分待ってから別のabテストに移行する必要があります。
- 同時接続の数がApache Worker Threadsよりも少ないことを確認してください。
- Apacheまたはpythonがクラッシュした場合、別のテストを実行する前にサーバーを再起動する必要があります。
動的ページのシーケンシャルテストケース
この章では、-n *と *-c のさまざまな組み合わせと、Webサーバーの負荷を徐々に増加させる重要なフラグについて説明します。
主に、負荷を増やすと、次のメトリックがどのように変化するかに注目する必要があります-
- 1秒あたりのリクエスト
- 接続時間(ミリ秒)
- 特定の時間内に処理されたリクエストの割合(ミリ秒)
また、サーバーがスタックし始め、失敗した要求を取得し始めるときに、しきい値に注意する必要があります。
1人の同時ユーザーが100ページヒット
私たちは、単一のユーザーによって100の連続したページの読み込みをしましょう
出力
それぞれ10ページのヒットを行う5人の同時ユーザー
このケースは、1か月に約50,000件以上のヒットが発生するWebサイトのピーク負荷に相当します。
次の後続の出力では、わかりやすくするために共通ヘッダーを省略します。
出力
10ページのヒットをそれぞれ行う10人の同時ユーザー
このテストは、10人の異なる同時ユーザーによる100ページのロードに対応し、各ユーザーは10ページの順次ページロードを実行します。
出力
20ページのヒットをそれぞれ行う20人の同時ユーザー
このテストは、20人の異なる同時ユーザーによる400ページのロードに対応しており、各ユーザーは20ページの順次ページロードを実行しています。
出力
それぞれ30ページのヒットを行う30人の同時ユーザー
このテストは、30人の異なる同時ユーザーによる900ページのロードに対応し、各ユーザーは30の連続ページロードを実行します。
出力
Webサイトの負荷を徐々に増やし、パフォーマンスをテストする方法を学びました。
Apacheベンチ-出力の比較
この章では、フラグありとフラグなしの出力を比較します。 適切なフラグを使用すると、Webアプリケーションのパフォーマンスがどのように向上するかを見てみましょう。 その前に、アプリケーションが単純な場合に違いに気付かない場合があることを理解する必要があります。 フラグを使用する場合とフラグを使用しない場合の単純なアプリケーションの場合と同様です。 次に、https://www.apache.org/URLを使用して同じテストを実行し、違いを確認します。
フラグなしでアプリケーションをテストする
このセクションでは、フラグなしでアプリケーションをテストする方法を理解します。
出力
フラグを使用したアプリケーションのテスト
このセクションでは、フラグを使用してアプリケーションをテストする方法を理解します。
出力
出力統計に大きな違いはないことに注意してください。
フラグなしのApache組織Webサイトのテスト
フラグなしでApache Organization Webサイトをテストする方法を見てみましょう。
出力
フラグを使用したApache組織Webサイトのテスト
次に、フラグを使用してApache Organization Webサイトをテストします。
出力
フラグを使用すると、1秒あたりのリクエストがどのように増加したかを簡単に確認できます。 この場合、特に -H "Accept-Encoding:gzip 、deflateの使用が原因です。このフラグはApacheサーバーにリクエストを gzipped 形式で処理するよう指示するためです。
Apacheベンチの結果を考慮する
Apache Benchの結果に関しては、いくつかの重要な点を考慮する必要があります。 これは、アプリケーションのボトルネックを取り除き、パフォーマンスを改善するための全体的な戦略を設計するのに役立ちます。
1秒あたりのリクエスト数が必要です。 これにより、Webサーバーのセットアップがどの程度うまく機能しているかがわかります。数値が大きいほど、パフォーマンスが向上します。 次に、接続時間(ミリ秒)と処理された要求の割合が表示されます。 これらのメトリックを目的のパフォーマンスに変更するには、Webサーバーの設定を微調整する必要がある場合があります。
Apacheまたは使用されているウェブサーバーのエラーログまたは(一般的な)ログにエラーがないか確認します。 負荷を増やすと、物事が窒息し始めます。メモリの問題が発生し始めます。 多くのpythonスクリプトは、並行性を念頭に置いて書かれていないとクラッシュし始めます。
Webサーバーがクラッシュしたりタイムアウトしたりする、それを超える重大な同時実行性の値を調べる必要がありますか? 通常、これはかなり高い並行性レベルで発生するはずです。 この値が低い場合、何かが間違っているため、これらの設定を低く/高く調整する必要があります。
結論
このチュートリアルでは、Apache Benchを使用してWebサイトまたはWebアプリケーションをロードテストする方法を学びました。 Apache Benchは、ボトルネックを減らし、パフォーマンスを向上させるために、Webアプリケーションサーバーのセットアップをどのように改善すべきかを判断するための非常に貴重なツールです。 Apache Benchの基本的な使用法を理解したので、さまざまなシナリオでアプリケーションのパフォーマンスを測定するための新しいテスト計画を作成することから始めます。