
あなたのウェブサイトのパフォーマンスはいかがですか?ウェブブラウザを開き、ウェブサイトにアクセスして動作を確認することはできますが、ビジネス(またはクライアント)が求める高いパフォーマンス基準を満たしているかどうかを確認するために、実際に負荷テストを実施していますか?もしこの質問の答えがわからない場合は、開発または管理するウェブサイトの負荷テストを開始する必要があります。
これは難しい、あるいはサードパーティのサービスにお金を払わなければならないと思う前に、もう一度考えてみてください。この作業を支援するツールは数多くあり、その多くはオープンソースで無料です。そのようなオープンソースツールの一つがApache Benchです。
Apache Bench は、Apache Web サーバーだけでなく、任意の HTTP サーバーや API (アプリケーション プログラミング インターフェイス) もこのツールで負荷テストできます。
Apache Benchのインストール方法と、ウェブサイトの負荷テストに使用する方法をご紹介します。Ubuntu 22.04でデモを行いますが、ほぼすべてのLinuxディストリビューションにインストールできます。Apache Benchはコマンドラインツールですが、使い方は非常に簡単です。
それでは、仕事に取り掛かりましょう。
参照: 採用キット: バックエンド開発者 (TechRepublic Premium)
必要なもの
この手順を実行するには、Ubuntu Linuxのインスタンスが必要です。Ubuntu ServerまたはDesktopのどちらでも構いません。リリースは問いません。また、sudo権限を持つユーザーとテスト用のウェブサイトも必要です。
Apache Benchのインストール方法
まず最初にApache Benchをインストールする必要があります。Ubuntu Linuxインスタンスにログインし、ターミナルウィンドウを開いて次のコマンドを実行します。
sudo apt-get install apache2-utils -y
万が一、Fedora Linux などの RHEL ベースのディストリビューションを使用している場合は、そのコマンドは次のようになります。
sudo dnf install httpd-tools -y
インストールは問題なく完了するはずです。完了したら、ウェブサイトの負荷テストを行う準備が整います。
Apache Benchで負荷テストを行う方法
Apache Benchコマンドを実行するにはいくつかのオプションが必要です。最もよく使用されるオプションは次のとおりです。
- -n: リクエスト数
- -c: 同時リクエスト数
- -H: ヘッダーを追加
- -r: ソケット受信エラーで終了しない
- -k: HTTP KeepAlive 機能を使用する
- -p: POSTするデータを含むファイル
- -t: ベンチマークに費やす最大時間
- -T: POST/PUTデータに使用するコンテンツタイプヘッダー
簡単なテストは次のようになります。
ab -n 1000 -c 100 http://サーバー/
ここで、SERVER はサーバーのドメインまたは IP アドレスです。
末尾の / は必須です。そうしないと、ab テストは失敗します。例えば、現在 IP アドレス 192.168.1.11 でテスト中の開発用ウェブサイトがあり、簡単な ab 負荷テストを実行したいとします。その場合のコマンドは以下のようになります。
ab -n 1000 -c 100 http://192.168.1.11/
このコマンドの結果は次のようになります。
転送されたHTML: 10918000バイト
1秒あたりのリクエスト数: 292.16 [#/秒] (平均)
リクエストあたりの時間: 342.282 [ミリ秒] (平均)
リクエストあたりの時間: 3.423 [ms] (平均、すべての同時リクエスト全体)
転送速度: 3193.18 [Kbytes/sec] 受信
接続時間(ミリ秒)
最小値 平均値[+/-標準偏差] 中央値 最大値
接続: 8 30 16.6 29 274
処理中: 19 301 106.9 268 734
待機中: 4 299 106.6 267 732
合計: 27 330 108.0 297 770
一定時間内に処理されたリクエストの割合(ミリ秒)
50% 297
66% 312
75% 322
80% 329
90% 544
95% 635
98% 718
99% 747
100% 770(最長リクエスト)
出力の大部分は説明を要しません。下半分は少し理解が必要かもしれません。上記の出力では、リクエストの50%が297ミリ秒、リクエストの66%が312ミリ秒以下といった具合です。このサイトには明らかに何か問題があるようです。応答時間はもっと速いはずです。
あるいは、特定のポートで特定のサイトをテストしたいとします。そのコマンドは次のようになります。
ab -n 1000 -c 100 http://192.168.1.11:9443/
gzip ヘッダーと deflate ヘッダーも追加し、KeepAlive を追加して、ソケット受信エラーでコマンドが終了しないようにする場合、コマンドは次のようになります。
ab -n 1000 -c 100 -H “Accept-Encoding: gzip, deflate” -rk http://192.168.1.11/
突然、次のような内容の出力が表示されることがあります。
失敗したリクエスト: 27
(接続: 0、受信: 0、長さ: 27、例外: 0)
もう少し厳しくして、次のようなコマンドでベンチマークに費やす時間を制限してみましょう。
ab -t 60 -n 10000 -c 100 http://192.168.1.11/
10,000 件のリクエストと 100 件の同時リクエストを処理するため、これには少し時間がかかります。
コマンドラインからWebサーバーの負荷テストを行うために必要なのは、ほぼこれだけです。abコマンドの機能について詳しく知りたい場合は、man abコマンドのマニュアルページをご覧ください。
Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube で TechRepublic の How To Make Tech Work を購読してください。
TechRepublic Academy の以下のリソースを活用して Linux エキスパートになりましょう。
- マスターLinux開発バンドル
- Linux & Docker コーディングバンドル
- 2022年 Linux 認定トレーニング バンドル
- マスターLinuxとGit認定バンドル