【PHP】Hip-Hop vm を試してみた
https://www.facebook.com/notes/facebook-engineering/the-hiphop-virtual-machine/10150415177928920 の記事を発見。
「そういや、そんなんあったなー。」 と、思いながら、リンクを辿って行くと
https://github.com/facebook/hiphop-php/wiki/HHVM-Pre-built-packages-for-Centos-6.4
CentOSへのインストール方法の解説が。
なんか、案外簡単に試すことが出来そうです。
ということで、vagrantに環境作って動かしてみました。
ひとまず、wordpressを動かしてみようじゃないかということで、 こちらを参考にさせて頂き、作業してみました。
HipHopのインストール
上のCentOSへのインストール方法そのままにインストール。
# yum install http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm # cd /etc/yum.repos.d # wget http://www.hop5.in/yum/el6/hop5.repo
mysqlが5.1とか入っちゃうので、remiから5.5をインストール。気分的な問題かも。
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm # yum install -y perl-DBD-MySQL libaio libaio-devel openssl-devel # yum --enablerepo=remi --disablerepo=updates,base install mysql mysql-server mysql-devel
WordPress設置
ずぼらにrootで放り込みます。
# mkdir /var/www # cd /var/www # wget http://ja.wordpress.org/wordpress-3.6.1-ja.tar.gz # tar xvzf wordpress-3.6.1-ja.tar.gz # cd wordpress # cp wp-config-sample.php wp-config.php
データベース設定
設定前にmysqlの初期化、DBの作成と、ユーザーの追加を行っておきます。
vim /var/www/wordpress/wp-config.php
define('DB_NAME', 'wpdata'); define('DB_USER', 'dbmanager'); define('DB_PASSWORD', 'dbmanagerpass');
hhvmの設定
設定ファイルを新規作成。こちらの参考記事を元に作成しました。
vim /etc/hhvm.hdf
Server { Port = 80 SourceRoot = /var/www/wordpress } VirtualHost { * { Pattern = .* RewriteRules { dirindex { pattern = ^/(.*)/*$ to = $1/index.php qsa = true } } } } StaticFile { Extensions { css = text/css gif = image/gif html = text/html jpe = image/jpeg jpeg = image/jpeg jpg = image/jpeg png = image/png tif = image/tiff tiff = image/tiff txt = text/plain } }
パスの正規表現がイケてないな…
サーバー起動
# hhvm --mode daemon --config /etc/hhvm.hdf
これでWebサーバーも立ち上がっているので、/wp-admin/install.phpにアクセスしてwordpressの初期設定を行っておきます。
比較用のapache/phpをインストール
ベンチマーク取ってみたいので、比較用にapache環境もインストール
# yum install -y pcre-devel # yum install httpd php php-devel php-pear php-mysql
インストールされたものは↓な感じです
# yum list httpd php php-devel php-pear php-mysql httpd.x86_64 2.2.15-29.el6.centos @updates php.x86_64 5.3.3-23.el6_4 @updates php-devel.x86_64 5.3.3-23.el6_4 @updates php-mysql.x86_64 5.3.3-23.el6_4 @updates php-pear.noarch 1:1.9.4-4.el6 @base
apcもインストール
# pecl install APC
httpd.confを編集
vim /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html" ↓ DocumentRoot "/var/www/wordpress"
php.iniを編集
;date.timezone = ↓ date.timezone = Asia/Tokyo 追加 ↓ extension=apc.so
負荷テスト
手元のMBAからabで。
apapche編
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.xx.xx (be patient).....done Server Software: Apache/2.2.15 Server Hostname: 192.168.xx.xx Server Port: 80 Document Path: /?p=5 Document Length: 11297 bytes Concurrency Level: 10 Time taken for tests: 6.220 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 1151400 bytes HTML transferred: 1129700 bytes Requests per second: 16.08 [#/sec] (mean) Time per request: 622.008 [ms] (mean) Time per request: 62.201 [ms] (mean, across all concurrent requests) Transfer rate: 180.77 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 0 Processing: 365 615 56.7 612 791 Waiting: 353 487 42.5 481 652 Total: 365 615 56.7 613 791 Percentage of the requests served within a certain time (ms) 50% 613 66% 633 75% 644 80% 652 90% 677 95% 711 98% 760 99% 791 100% 791 (longest request)
hiphop編
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.xx.xx (be patient).....done Server Software: Server Hostname: 192.168.xx.xx Server Port: 80 Document Path: /?p=5 Document Length: 11297 bytes Concurrency Level: 10 Time taken for tests: 2.237 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 1144400 bytes HTML transferred: 1129700 bytes Requests per second: 44.69 [#/sec] (mean) Time per request: 223.748 [ms] (mean) Time per request: 22.375 [ms] (mean, across all concurrent requests) Transfer rate: 499.48 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 104 221 32.1 225 288 Waiting: 102 210 32.2 211 280 Total: 104 221 32.1 226 288 Percentage of the requests served within a certain time (ms) 50% 226 66% 236 75% 240 80% 242 90% 260 95% 269 98% 280 99% 288 100% 288 (longest request)
3倍近く? apacheのチューニングを全くしていないからかもですが、結構差が出ました。
参考サイトでは、メディアのアップロードが出来ないとのことでしたが、 試してみたところ問題なくアップロード出来ました。
修正されたんでしょうかね、、、
業務で使うには、まだまだ怖いですが、このパフォーマンスはなかなかに魅力的です!