Apache-bench-environment-setup
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 によって異なる必要があります。