スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

ApacheBenchを使ってWordpressで公開しているページのパフォーマンス測定

今回はwordpressとさほど関連はないですが、wordpressで構築して公開しているサイトについてApacheBenchを使って、パフォーマンスをチェックしてみいと思います。

というわけで、いきなりコマンドを打って、実行してみました。URLは架空のものです。

$ ab -c 1 -n 1 http://siteA.net/

でうまくいったので、数字を増やしてやろうと

$ ab -c 2 -n 1 http://siteA.net/
ab: Cannot use concurrency level greater than total number of requests
Usage: ab [options] [http[s]://]hostname[:port]/path

とやってみるとエラーが(・ω・;)?Apacheの設定で同時接続数もしくは、同IPからアクセスに制限がかかってるものだと勘違いしていましたが、コマンドを正しく打ってませんでした。というか、エラーにその旨が書いてありますが。。

ad -c [同時アクセス数] -n [連続アクセス数] http://[アクセス先]

要するに、同時アクセス数 > 連続アクセス数をどうやって実現するんだ!?って話ですね。上記だと1アクセスするのに2端末使いますよって話です。1端末は用無し。。

そういうわけでミニ失敗談はさておき、気を取り直してパフォーマンスチェックします。

パフォーマンスチェック結果の見方

Document Path アクセス先htmlファイル
Document Length アクセス先ファイル容量
Concurrency Level 送信リクエスト数
Time taken for tests リクエスト完了までの所要時間
Complete requests 総リクエスト数
Failed requests 取りこぼしたリクエスト数。取りこぼしの発生は、同時接続数にサーバの処理能力が追い付いていないことが原因と考えられます
Requests per second 1秒あたりに処理されたリクエスト数。パフォーマンスの尺度として利用します。この値が高くなるように、サーバの最適化を行います
Time per request 1秒あたりに処理された所要時間
Transfer rate 1秒あたりに受信された容量
Connnection Times (ms) 上から順に接続(Connect)、処理(Processing)、待ち時間(Wait)を集計し、最小値(min)、平均値と標準偏差(mean[+/-sd])、中央値(median)、最大値(max)で表している
Percentage of the requests served within a certain time (ms) 処理時間の推移

この中でとりあえず気になるのは、Time taken for tests(リクエスト完了までの所要時間)ですかね。これが速ければ速い方がいいのは当たり前ですが、1ページ当たりどれくらいのストレスを感じるかの目安にしやすいと思います。実際はRequests per second(1秒あたりに処理されたリクエスト数)を基準とするようです。では実験結果は下記に。

サイトAの場合

同時アクセス数:10

連続アクセス数:100

100件のリクエスト、10の同時接続で10回行うという指定でコマンドを実行。


$ ab -c 10 -n 100 http://siteA.net/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking siteA.net (be patient).....done


Server Software: Apache/2.2.3
Server Hostname: siteA.net
Server Port: 80

Document Path: /
Document Length: 58079 bytes

Concurrency Level: 10
Time taken for tests: 119.893878 seconds
Complete requests: 100
Failed requests: 6
(Connect: 0, Length: 6, Exceptions: 0)
Write errors: 0
Non-2xx responses: 6
Total transferred: 5483898 bytes
HTML transferred: 5461574 bytes
Requests per second: 0.83 [#/sec] (mean)
Time per request: 11989.388 [ms] (mean)
Time per request: 1198.939 [ms] (mean, across all concurrent requests)
Transfer rate: 44.66 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 118 340.0 0 1185
Processing: 1173 11595 15396.5 5988 89118
Waiting: 0 11383 15377.9 5912 86730
Total: 1173 11713 15548.3 5988 90302

Percentage of the requests served within a certain time (ms)
50% 5988
66% 10682
75% 13300
80% 15521
90% 29029
95% 44044
98% 86566
99% 90302
100% 90302 (longest request)

まあ遅いですね。100件のリクエストでTime taken for testsが約119秒なので、1秒強/ページですかね。1件のリクエストでも試しましたが1秒強でした。
でもう少し見るとすればConnection Times (ms)の所ですかね。何に時間がかかっているか?connectのminが0msなのは自宅サーバ内で直接コマンドを実行してるからでしょう。とは言え、ここは自宅外の端末でテストする必要あり、改善するにはサーバを別回線にしなきゃとかって話になってくると思います。それ以外で見るとProcessingの所が時間かかってます。WordpressのPHPやMySQLの処理の所でしょう。ここは改善できる余地が十分にあると思います。
あと、Failed requestsが6件もあるのが気になります。サーバの処理能力が追い付いていない可能性があるので、手っ取り早くCPUをグレードアップさせろって事ですかね。

 

比較材料として、大手サイトにabコマンドでアクセスしてみました。と言っても、サーバリソースに負荷がかかるので、1件だけ。


$ ab -c 1 -n 1 http://www.yahoo.co.jp/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.yahoo.co.jp (be patient).....done


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

Document Path: /
Document Length: 25686 bytes

Concurrency Level: 1
Time taken for tests: 0.103670 seconds
Complete requests: 1
Failed requests: 0
Write errors: 0
Total transferred: 26211 bytes
HTML transferred: 25686 bytes
Requests per second: 9.65 [#/sec] (mean)
Time per request: 103.670 [ms] (mean)
Time per request: 103.670 [ms] (mean, across all concurrent requests)
Transfer rate: 241.15 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 25 25 0.0 25 25
Processing: 78 78 0.0 78 78
Waiting: 29 29 0.0 29 29
Total: 103 103 0.0 103 103


テスト結果が0.1秒で返ってきてますね。約0.1秒/ページで圧倒的に速い(;-∀-)
ついでにGoogleも試してみました。


$ ab -c 1 -n 1 http://www.google.co.jp/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.google.co.jp (be patient).....done


Server Software: gws
Server Hostname: www.google.co.jp
Server Port: 80

Document Path: /
Document Length: 10407 bytes

Concurrency Level: 1
Time taken for tests: 0.107092 seconds
Complete requests: 1
Failed requests: 0
Write errors: 0
Total transferred: 11146 bytes
HTML transferred: 10407 bytes
Requests per second: 9.34 [#/sec] (mean)
Time per request: 107.092 [ms] (mean)
Time per request: 107.092 [ms] (mean, across all concurrent requests)
Transfer rate: 93.38 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 23 23 0.0 23 23
Processing: 83 83 0.0 83 83
Waiting: 61 61 0.0 61 61
Total: 106 106 0.0 106 106

やはり、圧倒的に速いですね(;-∀-)まぁ比較するとこ間違ってるよ!という話ですが、 パフォーマンスの理想形という事で。

サイトBの場合

こっちの方が遅くて問題のサイトです。サイトAと同様の条件でコマンドを打ってみると。


$ ab -c 10 -n 100 http://siteB.info/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking siteB.info (be patient)...apr_poll: The timeout specified has expired (70007)

あちゃー、テストすらできずタイムアウトと言われてる。。では、10件のリクエストに減らしてみます。


$ ab -c 10 -n 10 http://siteB.info/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking siteB.info (be patient)...apr_poll: The timeout specified has expired (70007)

やべー、変んねーw 同時接続を1件にしてみます。


$ ab -c 1 -n 10 http://siteB.info/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking siteB.info (be patient).....done


Server Software: Apache/2.2.3
Server Hostname: siteB.info
Server Port: 80

Document Path: /
Document Length: 1624422 bytes

Concurrency Level: 1
Time taken for tests: 70.512342 seconds
Complete requests: 10
Failed requests: 0
Write errors: 0
Total transferred: 16246350 bytes
HTML transferred: 16244220 bytes
Requests per second: 0.14 [#/sec] (mean)
Time per request: 7051.234 [ms] (mean)
Time per request: 7051.234 [ms] (mean, across all concurrent requests)
Transfer rate: 225.00 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 6963 7050 77.8 7041 7203
Waiting: 6618 6704 77.3 6696 6858
Total: 6963 7050 77.8 7041 7203

Percentage of the requests served within a certain time (ms)
50% 7041
66% 7058
75% 7059
80% 7164
90% 7203
95% 7203
98% 7203
99% 7203
100% 7203 (longest request)

やっと動いた。。

リクエスト10件に対して、約70秒なので、約7秒/ページで致命的に遅いですね。これも同様Connection Times (ms)のProcessingでWordpressのPHPやMySQLの処理に時間がかかっているようですね。というか、思い当たるふしはあるのですが。。

このサイトのWordpressダッシュボードの表示は普通の速度なのですが、Wordpressとして公開しているページがとにかく重い。

WS000374

上図の通りカテゴリーがバカみたいに入ってるからです。。記事数が多いと思いますが、それほど大きな数字ではないと思います(予想)。タグも多いですね。このサイトはプログラムで投稿させてるのですが、僕の作ったプログラムがカテゴリーをむやみに付ける仕様にしているせいです。このプログラムの仕様も改善の余地が大幅にありますが、まずはサーバの環境的にWordpressのパフォーマンス向上させてみたいと思います。

このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

プロフィール

白鯖

Author:白鯖
安い寄せ集めの部品で構築し、CentOS5をインストールしました。主に、Webサーバ、アプリケーションサーバとして運用中。ハードの知識はあまり無いプログラマですが、全部自前で作るのは、手間はかかるけど、レン鯖より面白いです。

ハードウェア構成

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
Max TDP控え目なCPU
安くて静音なクーラー
検索フォーム
ユーザータグ
RSSフィード
はてな
スポンサード リンク
おすすめ書籍
twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。