Facebook が開発したPHPを超高速で実行する仮想マシン HipHop VM で WordPress が動く!ってことで AWS で試してみました。
詳細は、以下で
- Getting WordPress running on HHVM | HipHop for PHP
- Facebookが開発したPHPを超高速で実行する仮想マシン HipHop VM « A-Listers
- HHVM(HipHop Virtual Machine)を試してみる | shinodogg.com
最初 t1.micro インスタンス( 613 MiB メモリ )で試したんですが、以下のメッセージが表示されて起動しません。
# /usr/bin/hhvm --user root --config /etc/hhvm.hdf tcmalloc: large alloc 1210089472 bytes == (nil) @ tcmalloc: large alloc 1210089472 bytes == (nil) @ could not allocate 1210089471 bytes for translation cache
メモリ不足とのことなので m1.small インスタンス( 1.7 GiB メモリ )で試してみました。
OS インストール
2015-04-23: 追記 2015年4月より、デジタルキューブが Amazon Linux に Nginx + HHVM 設定済みの AMI を MarketPlace から提供開始しました。
こちらを利用することで、特に難しいことを考えることなく AWS で Nginx + HHVM な WordPress 環境が手に入ります。
AMI セルフホスティングプラン | 超高速 WordPress AMI 網元
OS は Ubuntu Server 12.04.1 LTS を選択します。
とりあえず、同一インスタンスで Apache2 の mod_php と比較してみたかったので apt-get で以下のパッケージをインストールしました。
- apache2
- mysql-client mysql-common mysql-server
- php5 libapache2-mod-php5 php5-cli php5-common php5-cgi php5-mysql
HipHop VMのインストール
/etc/apt/sources.list の最下行に deb http://dl.hiphop-php.com/ubuntu precise main を追加して、apt-get install するだけだそうです。
ラクチンですね。
$ sudo apt-get update $ sudo apt-get install hiphop-php
この後、設定ファイルを書いて
$ sudo vi /etc/hhvm.hdf Server { Port = 80 SourceRoot = /var/www/ } Eval { Jit = true } Log { Level = Error UseLogFile = true File = /var/log/hhvm/error.log Access { * { File = /var/log/hhvm/access.log Format = %h %l %u %t \"%r\" %>s %b } } } VirtualHost { * { Pattern = .* RewriteRules { dirindex { pattern = ^/(.*)/$ to = $1/index.php qsa = true } } } } StaticFile { FilesMatch { * { pattern = .*\.(dll|exe) headers { * = Content-Disposition: attachment } } } 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 } }
ログファイル用ディレクトリ( /var/log/hhvm/ )を作成して起動しましょう。
(Apache が起動している場合は /etc/init.d/apache2 stop) で停止しておいてね。
$ sudo mkdir /var/log/hhvm/ $ sudo /usr/bin/hhvm --mode daemon --user root --config /etc/hhvm.hdf $ sudo ps -ef | grep hhvm | grep -v grep root 1317 1 8 08:58 ? 00:00:22 /usr/bin/hhvm --mode daemon --user root --config /etc/hhvm.hdf
WordPress のインストール
普通にインストールしましょう。
ただし、コアハックが必要です。
2015-04-23: 追記 現在のバージョンの HHVM と WordPress の組み合わせでは、コアハックは必要ありません。
wp-includes/wp-db.php
問題点
とりあえず、メディアアップロードができないっす。
メディアアップロードしようとすると、以下のようなエラーが発生します。残念 ><
HipHop Fatal error: f_stream_get_wrappers is not going to be supported: stream protocol is not supported in /var/www/wp/wp-includes/functions.php on line 3830
WP Importer プラグインを有効化しようとしても、同じエラーが発生します。
2015-04-23: 追記 現在のバージョンの HHVM と WordPress の組み合わせでは、この問題は発生しません。
普通にメディアアップロードできます。
その他は、特に問題無さそう。
WP のインストール、ダッシュボードからプラグインインストールしたり、有効化したり、テーマ変更したりは問題無くできました。
パフォーマンス
ネットワークでのボトルネックを排除するため、Theme Unit Test データをインポートした WP 3.5 サイトに同一サーバ上から ab -n 100 -c 10 してみました。
hhvm
Server Software:
Server Hostname: ec2-176-34-9-3.ap-northeast-1.compute.amazonaws.com
Server Port: 80
Document Path: /wp/
Document Length: 43314 bytes
Concurrency Level: 10
Time taken for tests: 15.549 seconds
Complete requests: 100
Failed requests: 0
(Connect: 0, Receive: 0, Length: 0, Exceptions: 0)
Write errors: 0
Total transferred: 4350088 bytes
HTML transferred: 4331288 bytes
Requests per second: 6.43 [#/sec] (mean)
Time per request: 1554.926 [ms] (mean)
Time per request: 155.493 [ms] (mean, across all concurrent requests)
Transfer rate: 273.20 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 12.1 0 120
Processing: 604 1525 461.4 1480 2909
Waiting: 604 1504 466.3 1459 2907
Total: 604 1527 460.0 1480 2909
apache
Server Software: Apache/2.2.22
Server Hostname: ec2-176-34-9-3.ap-northeast-1.compute.amazonaws.com
Server Port: 80
Document Path: /wp/
Document Length: 43312 bytes
Concurrency Level: 10
Time taken for tests: 76.037 seconds
Complete requests: 100
Failed requests: 0
(Connect: 0, Receive: 0, Length: 0, Exceptions: 0)
Write errors: 0
Total transferred: 4360569 bytes
HTML transferred: 4331269 bytes
Requests per second: 1.32 [#/sec] (mean)
Time per request: 7603.658 [ms] (mean)
Time per request: 760.366 [ms] (mean, across all concurrent requests)
Transfer rate: 56.00 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 5.2 0 48
Processing: 4733 7453 1636.0 7120 12143
Waiting: 2757 4929 1231.1 4706 8438
Total: 4733 7454 1635.9 7120 12143
約5倍くらい速いっすね。ただ、メディアアップロードできないのが残念だなぁ…