SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

高速WordPress実行環境「KUSANAGI」を支えるサーバの技術

超高速WordPress仮想マシン「KUSANAGI」に学ぶ、PHP+MySQLアプリチューニングの秘訣

高速WordPress実行環境「KUSANAGI」を支えるサーバの技術(1)

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

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秒)となりました。

Firebugのネットタブでページのロード時間を確認する
Firebugのネットタブでページのロード時間を確認する

 同様のベンチマークを取っていきます。

 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、ページのロード時間は測定不能となりました。

次のページ
標準LAMP環境の導入とベンチマーク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
高速WordPress実行環境「KUSANAGI」を支えるサーバの技術連載記事一覧
この記事の著者

中村けん牛(プライム・ストラテジー株式会社)(ナカムラ ケンギュウ)

プライム・ストラテジー株式会社 代表取締役。 中学1年生で電波新聞社の『マイコンBASICマガジン』にプログラムを寄稿して以来、プログラミング歴30年。早稲田大学法学部を卒業後、野村證券に入社。公認会計士第二次試験合格。執筆監訳書籍に『WordPressの教科書』シリーズ(SBクリエイティブ)、『詳解 WordPress』『WordPressによるWebアプリケーション開発』(ともにオライリー・ジャパン)などがある。Tw...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

大曲仁(プライム・ストラテジー株式会社)(オオマガリ ヒトシ)

プライム・ストラテジー株式会社 執行役員CTO。 執行役員CTOとして技術のTOPを務め、超高速仮想マシン「KUSANAGI」の開発にも参加。技術書の執筆や登壇実績も多数。WordPressでは、PS Auto Sitemap ほか、開発プラグインをWordPress.ORGの公式ディレクトリで公開。WordCamp Yokohama 2010 実行委員長、WordPress日本語フォーラム世話役などコミュニティでも活...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

宮﨑悟(プライム・ストラテジー株式会社)(ミヤザキ サトル)

プライム・ストラテジー株式会社 チーフエンジニア。 国立函館高専を卒業後、現在のNEC情報システムズに入社。UNIX・Windowsアプリケーション開発、Solaris/Linuxでのシステム構築に20年以上従事した。SolarisとLinuxを専門とし、OSおよび仮想化技術を得意とする。日本OpenSolarisユーザグループのメンバとして、OSCなど勉強会での登壇多数。Twitter: @s-miyaza Facebook: satoru.miyazaki.31 Slideshare: http://www.slideshare.net/satorumiyazaki<KUSANAGI開発チーム> プライム・ストラテジー株式会社超高速WordPress仮想マシンKUSANAGIの開発とWordPressマネージドサーバホスティングのサービス開発を担当するチームです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9338 2016/04/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング