【Apache Bench】自宅サーバーの性能確認(WindowsPCで自宅サーバーのベンチマークを測定する方法)

このブログ「ネタンク」を自宅サーバーで公開し始めて2週間が経過しました。今のところ、想定外のサーバー停止等もなく非常に快調に動作し続けていて一安心。

ブログの表示スピードも、レンタルサーバー(エックスサーバー)で公開していたときよりも明らかにスピードアップしました。WordPressの管理画面もサックサク動作です。

とりあえず、自宅サーバー構築も一段落したので、ちょっと気になっていたことを今回確認してみました。

何かというと、僕の自宅サーバーは「どのくらいのアクセスまで耐えられるのか?」という疑問です。


スポンサーリンク

サーバーベンチマークツールの定番「Apache bench」

自宅サーバーの性能をチェックするために使ったツール(ベンチマークソフト)は、そんなに種類がなくて定番なのが、Apache benchです。Apache HTTP Serverに付属しているベンチマークソフトです。

僕はWindows10のPCにApache HTTP Serverをインストールして使いました。コマンドプロンプトで動作するツールなので、使い勝手は最悪ですが、これ以外に良さげなツールがないんですよね。

WindowsでApache benchを使う方法

Apache HTTP ServerはLinuxなどにインストールして使うイメージがありますが、Windows版もあります。

WindowsでApache benchを使う方法を簡単に説明しておきます。

ApacheのWindows版を配布しているサイトからダウンロードします。

いろいろなVerが配布されていますが、僕は一番上にあるApache 2.4.x VC14にしました。

ZIPファイルなので、適当なところに解凍してください。

 特にインストールは必要ありません。解凍したフォルダの中に「Apache24」→「bin」というフォルダに進みます。

Apache benchを使うには「bin」フォルダのアドレスが必要なので、アドレスバーからアドレスをクリップボードにコピーしておきます。

僕の場合は「C:\Users\yoshi\Desktop\httpd-2.4.25-x64-vc14\Apache24\bin」でした。

コマンドプロンプトを起動します。Windows10の場合は「スタート」→「Windowsシステムツール」→「コマンドプロンプト」にあります。

↑のような真っ黒な画面がコマンドプロントです。

cd binフォルダのアドレス

(僕の場合はcd C:\Users\yoshi\Desktop\httpd-2.4.25-x64-vc14\Apache24\bin)

と入力しエンターを押します。ちなみに、画面上で右クリックするとクリップボードの文字が張り付きます。

こんな画面になれば、Apache benchの使用準備が完了です。

使い方はすごく簡単です。

ab -n 100 -c 1 http://www.yahoo.co.jp/

といった形式でコマンドを入力します。コマンドの意味ですが、「100」の部分がリクエスト数(アクセスする回数)、「1」の部分が同時アクセス数、「http://www.yahoo.co.jp/」がサイトURLです。

この場合はYahoo JAPANに同時アクセス数1で100回アクセスするという意味です。

なお、アドレスの最後に/がないとエラーになります。httpsもダメ。

(他人のサイトのURLを指定するとDoS攻撃になってしまうので、必ず自分の自宅サーバーのURLを指定してください。)

少し待つと結果が表示されます。


スポンサーリンク

Apache benchの結果の見方

ベンチ結果は以下のように表示されます。

Server Software: nginx
Server Hostname: www.yahoo.co.jp
Server Port: 80

Document Path: /
Document Length: 19770 bytes

Concurrency Level: 1
Time taken for tests: 4.178 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 2043900 bytes
HTML transferred: 1977000 bytes
Requests per second: 23.93 [#/sec] (mean)
Time per request: 41.784 [ms] (mean)
Time per request: 41.784 [ms] (mean, across all concurrent requests)
Transfer rate: 477.69 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 9 10 1.0 9 16
Processing: 26 32 6.7 31 81
Waiting: 16 20 1.8 21 24
Total: 35 42 6.8 41 90

Percentage of the requests served within a certain time (ms)
50% 41
66% 41
75% 42
80% 43
90% 44
95% 47
98% 70
99% 90
100% 90 (longest request)

いろいろ書いてあって、よくわからないかもしれませんが、基本的には以下の2つの項目を確認すればOKです。

  • Failed requests
    リクエストが処理できなかった数。
  • Requests per second
    1秒間に処理できるリクエスト数

Failed requestsはサーバーがリクエスト(アクセス)を処理できなかった数です。0であれば、設定した条件では全てのアクセスを処理しきれたという意味です。ですので、この数値が50とか100とかになっている場合は、設定した条件には耐えられず、サーバーの処理能力不足を意味します。

Requests per secondは1秒間に処理できるリクエスト数です。この値が20であれば、1秒間に20リクエストを処理できたということを意味します。この数値が大きいほどサーバーが高速という意味です。

どのくらいが目安かは、WEBサイトの重さやCPU性能に依存するため一概に言えません。WEBサイトの表示高速化の対策をした場合の効果確認に使います。20→40にアップしたら、表示速度が2倍UPしたということになります。

僕のサーバーの性能確認

僕のサーバーの限界をチェックしてみました。ベンチ条件は、リクエスト数:500、3000で固定して、同時アクセスを変化させていきます。

具体的には

  1. ab -n 500 -c 20 http://~~~~/
  2. ab -n 500 -c 30 http://~~~~/
  3. ab -n 500 -c 40 http://~~~~/

のように徐々に同時アクセス数を増やしていき、Failed requestsが0でなくなる同時アクセス数を確認します。

(サーバーがDos攻撃対策されていると、正確な数値が測定できません)

ベンチ結果(リクエスト数500)

  • 同時リクエスト5 → OK (25.61)
  • 同時リクエスト10 → OK (27.27)
  • 同時リクエスト20 → OK (26.63)
  • 同時リクエスト30 → OK (25.34)
  • 同時リクエスト40 → OK (26.91)
  • 同時リクエスト50 → OK (26.35)
  • 同時リクエスト60 → OK (26.48)
  • 同時リクエスト100 → OK (25.64)
  • 同時リクエスト125 → OK (25.39)
  • 同時リクエスト140 → OK (25.97)
  • 同時リクエスト150 → NG
  • 同時リクエスト200 → NG

カッコ内の数値はRequests per secondの値です。

リクエスト数500の場合、同時アクセス数150まで耐えられました。

ベンチ結果(リクエスト数3000)

  • 同時リクエスト数100 → OK (26.07)
  • 同時リクエスト数140 → OK (25.93)
  • 同時リクエスト数150 → NG

リクエスト数500と同じ結果になりました。リクエスト数が多いと、ベンチをかける時間が長くなるだけで、負荷的には変わらないので、当然といえば当然の結果です。

なので、同時リクエスト数に対して、リクエスト数は十分に大きい値に設定しておけば良さそうです(無駄に大きくしてもあまり意味ない)。

意図的に長時間負荷を与えたい場合はリクエスト数を1000000くらいに設定すればいいじゃないかな。

ちなみに同時リクエスト1000にすると

試しに同時アクセス数を1000にしてみると、当然ですが半数くらいのリクエストは処理できなくなります。

ベンチマーク実行中にブラウザでWEBサイトを開いてみるとエラーが表示されました。データベースに接続できないというエラーで、データーベースサーバーが限界に達するみたいです。

僕のサーバーは同時アクセス140まで耐えられるらしい

今回のベンチマークテストの結果から僕のサーバーは同時リクエスト140まで耐えられることがわかりました。

実運用上はそんなに同時アクセスがくることはないため、全然余裕といった感じです。

だた、僕のサーバーってDOS攻撃対策をしていないので、悪い人に攻撃されると一瞬で重たくなるリスクがあります。単純にF5連打されただけでも結構やばいかも。

DOS攻撃、F5アタック対策は今後の課題です。

スポンサーリンク
 

コメントを残す