EC2 上の CentOS 6.6 で Nginx + HHVM を使う
はじめに
Facebook が開発した PHP の超高速実行環境 HHVM (HipHop Virtual Machine)
どんなものか確かめてみるべく Nginx + HHVM を使ってみました
yum でサクッと入れるだけだと思っていたら、2016/1 時点で配布されているビルド済みパッケージは Ubuntu、Debian、Mint しかサポートされていないんです
CentOS 上にインストールしたかったのですがなかなか情報が見つからず
ソースからビルドするのはハードルも高いしメンテナンスを考えると躊躇してしまうので、非公式らしいですか yum でインストールする方法を調べました
環境をつくるまでの道のりが意外と長かったので、
CentOS 6.6 上に Nginx + HHVM で PHP を動かす環境を作るときのメモです
※仮想マシンは EC2 を利用しています
ググると Hop5 のリポジトリからインストールしている記事が多いですが、HHVM のバージョンが古いのと HACK が動かないらしいです
あと起動スクリプトも中途半端な状態なので微妙でした
今回の方法では gleeze リポジトリを利用するので、最新のHHVM3.5を入れることがきでます
Nginx インストール
nginx のインストールは超簡単です
CentOS の公式リポジトリにある nginx はめっちゃ古いバージョンなので、nginx の公式リポジトリから最新版をインストールします
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install nginx
HHVM インストール
Github で公開されている CentOS へのインストール手順では、ソースからビルドするか コミュニティの方が用意した非公式リポジトリからインストールするよう書かれています
公式のインストール手順
ですが、この通りにやっても依存関係のエラーが出てインストールできません・・・
なので、以下のようにして epel、remi、gleeze のリポジトリからそれぞれ必要なパッケージをインストールします
HHVM は gleeze リポジトリで配布されているんですがこれが出処不明のサーバーです
--nogpgcheck をつけないといけないところがヤバイ
# epel リポジトリの追加とパッケージのインストール
$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum install libmcrypt-devel glog-devel jemalloc-devel tbb-devel libdwarf-devel mysql-devel libxml2-devel libicu-devel pcre-devel gd-devel boost-devel sqlite-devel pam-devel bzip2-devel oniguruma-devel openldap-devel readline-devel libc-client-devel libcap-devel libevent-devel libcurl-devel libmemcached-devel
# remi リポジトリの追加とパッケージのインストール
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum --enablerepo=remi install libwebp mysql mysql-devel mysql-lib
# gleez リポジトリの追加と HHVM のインストール
$ sudo rpm -Uvh http://yum.gleez.com/6/x86_64/gleez-repo-6-0.el6.noarch.rpm
$ sudo yum install --nogpgcheck hhvm
インストールが完了したら設定を修正してそれぞれのサーバーを起動します
Nginx セットアップ
php にアクセスがあった時に FastCGI で HHVM と通信する設定を入れます
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
$ /etc/init.d/nginx start
HHVM セットアップ
ドキュメントルートと実行ユーザーを設定します
; ドキュメントルート
hhvm.server.source_root = /usr/share/nginx/html/
; 実行ユーザー
hhvm.server.user = nginx
; error.log の各行に日時を出力する
hhvm.log.header = true
$ /etc/init.d/hhvm start
まとめ
php-fpm + OPcache と比較した時に軽い処理だと php-fpm の方が速い場合もありました
HHVM は1プロセスでマルチスレッドで動作してますが、php-fpm はマルチプロセスなので、CPU 使用率は HHVM の方が低かったです
DB アクセスして JSON を返すだけの API だとむしろ php-fpm のがちょっと速いくらいでほとんど差はみられませんでした
jmeter で負荷を掛けて確認したところ、どちらを利用した場合でも負荷が1つのコアに偏っていて、マルチコアのサーバーでも CPU が遊んでる状態になっていました
HHVM、php-fpm に原因がありそうですがそこはわかってないです
Author And Source
この問題について(EC2 上の CentOS 6.6 で Nginx + HHVM を使う), 我々は、より多くの情報をここで見つけました https://qiita.com/Chanmoro/items/66a206f07df28726cbec著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .