SHOEISHA iD

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

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

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

超高速WordPress仮想マシン「KUSANAGI」が搭載するPHP処理系とその導入方法

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

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

httpdの設定

 HHVMはFastCGIの環境で動作させるので、httpdの設定を変更し、event_mpmの構成に変更します。

 従来、Apacheの主流となるマルチプロセッシングモジュールは「prefork MPM」でしたが、Apache 2.4から「event MPM」が選択できるようになりました。event MPMは、FastCGI方式のphp-fpmと組み合わせることによって、従来のprefork MPM+mod_phpの組み合わせに比べて、メモリ使用量を大きく減らし、同時接続数増加時のパフォーマンス劣化も抑えられるメリットを得られるようになります。

 イメージとしては、軽量高速で近年シェアを伸ばしているWebサーバのnginxに近いものです。Apacheがもともと持っている豊富なモジュールや.htaccessによる柔軟な設定制御などのメリットはそのままに、パフォーマンスが大幅に向上するので、この構成は「新しいApache」といっても過言ではないと思います。

「/etc/httpd/conf.modules.d/00-mpm.conf」の編集

 mpm_prefork_moduleの行をコメントアウトし、mpm_event_moduleの行のコメントアウトを外します。

[root@CodeZine-CentOS ~]# egrep -e '^#?LoadModule' /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so

[root@CodeZine-CentOS ~]# sed -i.orig -e 's/^\(LoadModule mpm_prefork_module\)/#\1/' -e 's/^#\(LoadModule mpm_event_module\)/\1/' /etc/httpd/conf.modules.d/00-mpm.conf

[root@CodeZine-CentOS ~]# diff -u /etc/httpd/conf.modules.d/00-mpm.conf.orig /etc/httpd/conf.modules.d/00-mpm.conf
--- /etc/httpd/conf.modules.d/00-mpm.conf.orig  2016-04-29 04:10:10.232973523 +0000
+++ /etc/httpd/conf.modules.d/00-mpm.conf       2016-04-29 04:10:22.910061876 +0000
@@ -3,7 +3,7 @@

 # prefork MPM: Implements a non-threaded, pre-forking web server
 # See: http://httpd.apache.org/docs/2.4/mod/prefork.html
-LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
+#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

 # worker MPM: Multi-Processing Module implementing a hybrid
 # multi-threaded multi-process web server
@@ -15,5 +15,5 @@
 # threads only for connections with active processing
 # See: http://httpd.apache.org/docs/2.4/mod/event.html
 #
-#LoadModule mpm_event_module modules/mod_mpm_event.so
+LoadModule mpm_event_module modules/mod_mpm_event.so

「/etc/httpd/conf.d/php.conf」の編集

 ファイルの前後を「<ifmodule prefork.c>」「</ifmodule>」で囲みます。

[root@CodeZine-CentOS ~]# mv /etc/httpd/conf.d/php.conf  /etc/httpd/conf.d/php.conf.orig

[root@CodeZine-CentOS ~]# (echo "<IfModule prefork.c>"; cat /etc/httpd/conf.d/php.conf.orig ; echo "</IfModule>") > /etc/httpd/conf.d/php.conf

[root@CodeZine-CentOS ~]# diff -u /etc/httpd/conf.d/php.conf.orig  /etc/httpd/conf.d/php.conf
--- /etc/httpd/conf.d/php.conf.orig     2015-06-23 21:20:23.000000000 +0000
+++ /etc/httpd/conf.d/php.conf  2016-04-29 04:13:23.856322985 +0000
@@ -1,3 +1,4 @@
+<IfModule prefork.c>
 #
 # Cause the PHP interpreter to handle files with a .php extension.
 #
@@ -30,3 +31,4 @@
 #
 php_value session.save_handler "files"
 php_value session.save_path    "/var/lib/php/session"
+</IfModule>

「/etc/httpd/conf/httpd.conf」の編集

 DirectoryIndexに、index.phpを追加します。

[root@CodeZine-CentOS ~]# sed -i.orig 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/' /etc/httpd/conf/httpd.conf

 末尾に、以下のエントリを追加します。

補足

 <<EOFのような書き方をヒアドキュメントといいます。Bashでは「> 」のようなプロンプトが表示されます。

[root@CodeZine-CentOS ~]# cat >> /etc/httpd/conf/httpd.conf<<EOF
> <IfModule mpm_event_module>
>         StartServers             2
>         MinSpareThreads         25
>         MaxSpareThreads         50
>         ThreadsPerChild         50
>         MaxRequestWorkers       50
>         MaxConnectionsPerChild   0
>        <FilesMatch \.php$>
>                 SetHandler "proxy:fcgi://127.0.0.1:9000"
>        </FilesMatch>
> </IfModule>
> EOF

[root@CodeZine-CentOS ~]# diff -u /etc/httpd/conf/httpd.conf.orig /etc/httpd/conf/httpd.conf
--- /etc/httpd/conf/httpd.conf.orig     2015-11-19 21:35:27.000000000 +0000
+++ /etc/httpd/conf/httpd.conf  2016-04-29 04:18:45.905569576 +0000
@@ -161,7 +161,7 @@
 # is requested.
 #
 <IfModule dir_module>
-    DirectoryIndex index.html
+    DirectoryIndex index.php index.html
 </IfModule>

 #
@@ -351,3 +351,14 @@
 #
 # Load config files in the "/etc/httpd/conf.d" directory, if any.
 IncludeOptional conf.d/*.conf
+<IfModule mpm_event_module>
+        StartServers             2
+        MinSpareThreads         25
+        MaxSpareThreads         50
+        ThreadsPerChild         50
+        MaxRequestWorkers       50
+        MaxConnectionsPerChild   0
+       <FilesMatch \.php$>
+                SetHandler "proxy:fcgi://127.0.0.1:9000"
+       </FilesMatch>
+</IfModule>

HTTPサーバの再起動による設定の反映

 httpd -tで設定が正しいことを確認し、再起動します。

[root@CodeZine-CentOS ~]# httpd -t
Syntax OK

[root@CodeZine-CentOS ~]# systemctl restart httpd

ベンチマークの取得

 Firebugで確認します。25msでした。PHP5.6+APCu/OPCacheにくらべ、ロード時間が33%になりました。

 続いて、コンソールからabコマンドでベンチマークをとります。パラメータを変更して、より負荷が高い状態でベンチマークをとることで、値の揺らぎをなくします。

[root@CodeZine-CentOS ~]# ab -n 1000 -c 100 http://localhost/

 筆者の環境では51.25でした。PHP 5.6+APCu/OPCacheと比較して2.86倍の値になります。

ベンチマークまとめ

 PHPの各バージョンでのベンチマーク結果をまとめました。

PHPのバージョンごとのベンチマーク結果
  1秒当たりの同時アクセス数 ページのロード時間
PHP 5.4 6.17 168ms
PHP 5.6 6.38 176ms
PHP 5.6+APCu/OPCache 17.86 74ms
PHP 7+APCu/OPCache 42.18 29ms
HHVM 51.25 25ms

 今回は、KUSANAGIの要素技術の一つであるPHPに焦点を絞って解説しました。次回は、HTTPサーバについて解説していきますので、お楽しみに。

 プライム・ストラテジー株式会社では人材を募集しています。KUSANAGIの国内外の主要クラウドプラットフォームでの開発・展開、エンタープライズ案件のPHPなどでのシステム開発やKUSANAGIの導入、運用などに興味のあるかたはぜひご応募ください。

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

  • 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/9456 2016/06/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング