KUSANAGI環境と標準LAMP環境のWordPressベンチマーク比較
それでは、KUSANAGI環境とCentOS 7の標準LAMP環境を用意してそれぞれのWordPressのトップページでベンチマークを取って具体的な数値を把握するところから始めましょう。ベンチマークは2つ取るものとします。
一つは、ブラウザでアクセスしてWordPressが生成するHTMLが何ミリ秒でサーバから返ってくるかを測定します。以降、この測定する時間を「ページのロード時間」と呼びます。測定にはブラウザの開発ツールを用います。本連載では、FirefoxにアドオンのFirebugをインストールして測定します。
もう一つは、測定ツールのab(Apache Bench)で仮想マシン内部から自分自身にアクセスして、1秒あたりに処理できたアクセス数を測定します。以降、この数を「1秒あたりの同時アクセス数」と呼びます。
KUSANAGI環境の導入とベンチマーク
KUSANAGI環境は、次のページを参考に自分の利用しやすいクラウドプラットフォームを選択してください。
なお、クラウドプラットフォームを問わず、メモリ3.5GB以上のインスタンスをKUSANAGIの推奨環境としておりますが、学習用途としては、メモリは2GB以上あれば十分です。今回は具体的なベンチマークの結果を示す必要がありますので、本連載では、Microsoft Azure(新ポータル)のD1_V2 Standardインスタンス(1コア、3.5GBメモリ)を東日本リージョンで利用するものとして進めます。D1_V2 Standardインスタンスは、1か月約8000円前後のCPU性能を重視したインスタンスです。1時間の利用料は約11円ほどで、学習用途として4時間利用した場合の利用料は約44円です。便利な時代になったものです。なお、異なる環境で進める方は、以降、ご自身の環境に読み替えて進めてください。
それでは、KUSANAGIを起動させてみましょう。次のページを参考に、KUSANAGIを起動させ、SSHで接続し、管理者ユーザーになるところまで進めてください。なお、リージョンは「東日本(Japan East)」をインスタンスサイズは「D1_V2 Standard」を選択、してください。
以下、ホスト名(パブリックDNS)での名前解決が可能であり、ホスト名で仮想マシンにアクセスできるものとして進めます。名前解決は、クライアントマシンのhostsファイルなどの設定によるものでも構いません。ここでは、ホスト名がxxx.xxx.cloudapp.azure.comであるものとして進めます。
管理者ユーザーになりましたら、KUSANAGIの初期設定を行います。次のページを参考にKUSANAGIの初期設定を行ってください。なお、ここからは各クラウドプラットフォーム共通の内容です。
KUSANAGIの初期設定が完了したら、次のページを参考に、WordPressのプロビジョニングを行って、WordPressのインストールに必要なディレクトリの生成やファイル群の配置などを行います。hostnameの設定では、xxx.xxx.cloudapp.azure.comなど仮想マシンにアクセス可能なホスト名を入力してください。なお、今回はLet's Encryptの設定は行いませんので、Let's Encryptの設定時には、エンターキーを2回入力して処理をスキップしてください。
プロビジョニングが完了したら、次のページを参考にWordPressをインストールします。
WordPressのインストールが完了したら、コンソールに戻って、現在のステータスを確認しましょう。
[root@codezin-kusanagi ~]# kusanagi status
次のような、ステータスが表示されます。
● nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2016-03-14 21:28:11 JST; 32min ago ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: inactive (dead) ● hhvm.service - HHVM virtual machine, runtime, and JIT for the PHP language Loaded: loaded (/etc/systemd/system/hhvm.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2016-03-14 21:28:19 JST; 32min ago ● php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled) Active: inactive (dead) ● php7-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php7-fpm.service; disabled; vendor preset: disabled) Active: inactive (dead) fcache off bcache off
kusanagi statusコマンドは、現在実行されているWebサーバ、PHP処理系、キャッシュの状況を表示します。初回起動時は、nginx+HHVM構成となっていることが確認できます。最後に表示されているfcache offはnginxのFastCGIキャッシュが無効になっていることを、bcache offはWordPressのKUSANAGI専用プラグインとして同梱されているページキャッシュが無効となっていることをそれぞれ示しています。なお、KUSANAGIコマンドやFAQなどについては、次のページを参照してください。
- 『ドキュメント』
それでは、ベンチマークを取っていきます。まず、最初に、Apache 2.4+PHP 5.6構成から始めます。ミドルウェアの切り替えもKUSANAGIコマンドで行います。kusanagi httpdコマンドでApache 2.4を有効に、kusanagi php-fpmコマンドで、PHP 5.6を有効にします。
[root@codezin-kusanagi ~]# kusanagi httpd [root@codezin-kusanagi ~]# kusanagi php-fpm
これで、Apache 2.4+PHP 5.6構成になりましたので、abコマンドでベンチマークを取ります。
[root@codezine-kusanagi ~]# ab -n 100 -c 10 http://xxx.xxx.cloudapp.azure.com/
次のような結果が得られます。
This is ApacheBench, Version 2.3 <$Revision: 1706008 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking codezine-kusanagi.japaneast.cloudapp.azure.com (be patient).....done Server Software: Apache Server Hostname: codezine-kusanagi.japaneast.cloudapp.azure.com Server Port: 80 Document Path: / Document Length: 10946 bytes Concurrency Level: 10 Time taken for tests: 3.232 seconds Complete requests: 100 Failed requests: 0 Total transferred: 1124500 bytes HTML transferred: 1094600 bytes Requests per second: 30.94 [#/sec] (mean) Time per request: 323.199 [ms] (mean) Time per request: 32.320 [ms] (mean, across all concurrent requests) Transfer rate: 339.77 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 0 Processing: 129 318 52.0 309 555 Waiting: 129 317 47.6 309 459 Total: 129 318 52.0 309 555 Percentage of the requests served within a certain time (ms) 50% 309 66% 323 75% 338 80% 352 90% 375 95% 406 98% 460 99% 555 100% 555 (longest request)
Requests per secondが1秒あたりの同時アクセス数です。10秒ほどインターバルをおいて、5回実行します。筆者の環境では、5回目が30.94となりました。
ページのロード時間も測定します。Firefoxでトップページにアクセスします。Firebugを有効にして、ネットタブのタイムラインの最上段を確認します。筆者の環境ではおよそ38ms(38ミリ秒、0.038秒)となりました。
同様のベンチマークを取っていきます。
Apache 2.4+PHP 7構成へ、次のコマンドで切り替えます。
[root@codezine-kusanagi ~]# kusanagi php7
abコマンドとFirebugを用いたベンチマークを取ります。筆者の環境では、1秒あたりの同時アクセス数は76.76、ページのロード時間はおよそ20msとなりました。
Apache 2.4+HHVM 3.2構成へ、次のコマンドで切り替えます。
[root@codezine-kusanagi ~]# kusanagi hhvm
abコマンドとFirebugを用いたベンチマークを取ります。筆者の環境では、1秒あたりの同時アクセス数は8回目のabコマンドで92.42、ページのロード時間はおよそ16msとなりました。HHVMは、初回のabコマンドで測定した同時アクセス数は、10前後となり、ベンチマークの回数を重ねるごとに性能が発揮されていき、7、8回で最高性能になります。詳しくは、連載の中で解説しますが、これは、バイトコードの生成とJITコンパイルを行うHHVMの特性です。
続いて、nginxと各PHP処理系のベンチマークを取ります。nginxへの切り替えは、次のコマンドで行います。
[root@codezine-kusanagi ~]# kusanagi nginx
筆者の環境でApacheの場合と同様のベンチマークを取った結果は次のようになりました。
- PHP 5.6 31.24/s 38ms
- PHP 7 80.05/s 17ms
- HHVM 3.12 97.74/s 15ms
ページのロード時間は、ネットワーク環境にも依存しますので、若干の揺らぎがありますが、おおむね、数パーセントほど、nginx環境の方が、Apache環境よりよい数値が出ました。
標準LAMP環境との比較にはあまりなりませんが、参考までに、ページキャッシュを有効にしたKUSANAGI環境のベンチマークを取ります。
次のコマンドで、WordPressのKUSANAGI専用プラグインのページキャッシュを有効化します。
[root@codezine-kusanagi ~]# kusanagi bcache on
ここでは、PHP処理系はPHP 7でベンチマークを取りますので、次のコマンドでPHP 7に切り替えます。
[root@codezine-kusanagi ~]# kusanagi php7
ページキャッシュを有効にした場合、abのベンチマークはリクエスト数が少ないとムラが大きくなりますので、リクエスト数を10000に、同時接続数も100に増加して実行します。
[root@codezine-kusanagi ~]# ab -n 10000 -c 100 http://xxx.xxx.cloudapp.azure.com/
筆者の環境では、1秒あたりの同時アクセス数は1530.14、ページのロード時間は7ms前後となりました。
最後に、次のコマンドで、nginxのFastCGIキャッシュを有効にしてベンチマークを取ります。
[root@codezine-kusanagi ~]# kusanagi fcache on
筆者の環境では、1秒あたりの同時アクセス数は14942.95、ページのロード時間は測定不能となりました。