OPcacheをインストールしてWordPressを高速化する

PHPは、実行時にオペコード(operation code)と呼ばれるPHPエンジン用の中間コードにコンパイルされてから実行されます。

中間コードへのコンパイルにはコストがかかりますので、一度コンパイルしたオペコードをキャッシュし、再利用すれば、大幅なパフォーマンスアップが可能です。

そのためのプログラムが、OPcacheです。Amazon Linux AMI + PHP7の環境にOPcacheを導入する手順は下記のようになります。

まず、yumコマンドでPHP7用のOPcacheをインストールします。

# yum install php70-opcache

yumでOPcahceをインストールすると、OPcache用の設定ファイルが用意されますので、必要に応じて編集します。たいていの場合、とりあえずデフォルトでも問題ないとは思いますが、今回、PHPファイルのタイムスタンプをチェックする間隔だけデフォルトの2秒から60秒に変更しました。そんなに頻繁にチェックする必要もないと思うので。

# cd /etc/php.d
# vim 10-opcache.ini

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
;opcache.revalidate_freq=2
opcache.revalidate_freq=60  ; 2秒から60秒に変更

Apacheのabコマンドでパフォーマンスを計測します。本当は別のマシンから実行した方が良いですが、とりあえずWebサーバーのローカルから実行しちゃいます。

$ ab -n 100 -c 10 http://localhost/

AWSのt2.microインスタンスの場合、OPcacheの有効前は、1リクエスの処理時間は約254ミリ秒でした。

Time per request: 254.800 [ms] (mean, across all concurrent requests)

Webサーバーを再起動して、OPcacheを有効にします。

$ service httpd restart

再度、abコマンドを実行してパフォーマンスを計測します。OPcacheの有効後は、約98ミリ秒に短縮しました。約2.5倍も高速化しました。

Time per request: 98.308 [ms] (mean, across all concurrent requests)

正直なところ、オペコードのキャッシュがこんなに効果があるとは思っていませんでした。WordPressでWebサイトを運用する場合、OPcacheの導入は必須と言っていいのかなと思います。