超高速WordPress仮想マシン「KUSANAGI」が搭載するPHP処理系とその導入方法
高速WordPress実行環境「KUSANAGI」を支えるサーバの技術(2)
HHVMの導入
HHVM(HipHop Virtual Machine)は、米フェイスブックが開発するPHP互換となる処理系の一つです。HHVMの特徴は、なんと言ってもその速さにあり、PHPのOPCacheやAPCuに相当するHHBCと呼ばれる中間コードのキャッシュ機能に加え、さらにJITコンパイル機能を搭載し、非常に高いパフォーマンスを実現しています。
PHPのOPCacheやAPCu、HHVMのHHBCは、中間コードをキャッシュし、インタープリタによる変換コストを省略するものですが、HHVMのJITコンパイル機能は、これをさらに一歩推し進め、頻繁に実行されるコードを中間コードから機械語への変換とメモリ上へのキャッシュを行い、CPUが直接実行可能な機械語による処理とするものです。
PHP 5やPHP 7が、中間コードへの一段階の変換処理のみであるのに対し、HHVMは、中間コードへの変換とJITコンパイルという二段階の変換処理が実行されることになります。また、一定回数未満においては、JITコンパイル処理はなされません。
この二段階の変換処理は、パフォーマンス面にもあらわれます。初回のアクセスは、PHP 5やPHP 7よりもパフォーマンスは上がりませんが、中間コードがキャッシュされるとパフォーマンスも改善し、さらに、JITコンパイルの対象となる規定実行回数に達し、コンパイル処理が完了した後は、非常に高速に動作するようになります。この特性は、運用時には問題はなりませんが、HHVMの初回起動時や再起動時は、注意が必要となります。
また、HHVMはPHP 5やPHP 7との高い互換性を有しています。通常は、PHP 5互換のモードで動作していますが、設定ファイルにhhvm.php7.all = 1の設定を行うことによって、PHP 7モードでの動作にも変更可能となっています。ただし、すべての機能やモジュールに完全な互換性があるわけではなく、特にテーマやプラグインによっては互換性を確保するための修正が必要なものがあります。運用では、このことも念頭に置いておいて、十分な検証を行うようにしてください。
HHVMの導入については、GitHub内Facebook/HHVMコミュニティのWikiに記載されている「Building and installing hhvm on CentOS 7.x」を参考に、RPMパッケージからHHVM 3.12のインストールを行います。今回インストールするHHVM 3.12は、RemiリポジトリからインストールしたPHP 5.6やPHP 7との共存が可能です。
まず、HHVMのインストールに必要なパッケージを先にそろえます。
[root@CodeZine-CentOS ~]# yum install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl,ImageMagick,sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel {unixODBC,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel glog-devel oniguruma-devel ocaml gperf enca libjpeg-turbo-devel openssl-devel mariadb mariadb-server {fribidi,libc-client}-devel make -y
[root@CodeZine-CentOS ~]# yum install inotify-tools -y
[root@CodeZine-CentOS ~]# yum install http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.12.1-1.el7.centos.x86_64.rpm
[root@CodeZine-CentOS ~]# /usr/local/bin/hhvm --version
HipHop VM 3.12.1 (rel)
Compiler: tags/HHVM-3.12.1-0-gf516f1bb9046218f89885a220354c19dda6d8f4d
Repo schema: f2e5f39b2ad4a08bcbd90b5d8bcb580f40fba6c8
サービスの設定を変更し、設定ファイルで指定した待ち受けポートを使用するようにします。
[root@CodeZine-CentOS ~]# sed 's/-vServer.Port=9001//' /usr/lib/systemd/system/hhvm.service [Unit] Description=HHVM HipHop Virtual Machine (FCGI) [Service] ExecStart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini --user nginx --mode daemon -vServer.Type=fastcgi [Install] WantedBy=multi-user.target [root@CodeZine-CentOS ~]# sed -i 's/-vServer.Port=9001//' /usr/lib/systemd/system/hhvm.service
/etc/hhvm/server.iniで、待ち受けポート(hhvm.server.port)を9000に変更します。
[root@CodeZine-CentOS ~]# sed -I 's/hhvm.server.port = 9001/hhvm.server.port = 9000/' /etc/hhvm/server.ini [root@CodeZine-CentOS ~]# systemctl daemon-reload [root@CodeZine-CentOS ~]# systemctl start hhvm
この記事は参考になりましたか?
- 高速WordPress実行環境「KUSANAGI」を支えるサーバの技術連載記事一覧
-
- 超高速WordPress仮想マシン「KUSANAGI」が搭載するPHP処理系とその導入方法
- 超高速WordPress仮想マシン「KUSANAGI」に学ぶ、PHP+MySQLアプリチュ...
- この記事の著者
-
中村けん牛(プライム・ストラテジー株式会社)(ナカムラ ケンギュウ)
プライム・ストラテジー株式会社 代表取締役。 中学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マネージドサーバホスティングのサービス開発を担当するチームです。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
