ちょっと仕事でPHPのパフォーマンス改善の必要があったので
勉強がてらPHPのAPCとOPcache試してみた。
APCのインストール
環境は
$ pecl install apc Fatal error: Call to a member function getFilelist() on a non-object in /usr/local/Cellar/php55/5.5.10/lib/php/PEAR/Command/Install.php on line 742
インストールで怒られてこける
issueになってた
Can not install extension with pecl · Issue #1039 · Homebrew/homebrew-php · GitHub
$ touch $(brew --prefix php54)/lib/php/.lock && chmod 0644 $(brew --prefix php54)/lib/php/.lock
再度インストール
$ pecl install apc
$ php -m | grep apc
apc
どれくらい早くなるのか確認する
/etc/hostsを書き換えて
phpinfoを出力してみる
// 10並列で100リクエスト $ ab -n 100 -c 10 http://apc.localhost/php_info.php // apcなし Time per request: 8.322 [ms] (mean) Time per request: 0.832 [ms] (mean, across all concurrent requests) // apcあり Time per request: 8.026 [ms] (mean) Time per request: 0.803 [ms] (mean, across all concurrent requests)
そこまで劇的に早くはならない。
OPcacheのインストール
ついでにPHP55に上げる。
PHP55からはデフォルトでOPcacheが入る。
APCは使わない流れっぽい。
APCより20%ほど早くなることもあるらしい。
PHP5.5 のコードキャッシュは APC から Zend OPcache へ - Shin x blog
$ brew install php55 --with-fpm $ brew unlink php54 $ brew link php55 $ vi /usr/local/etc/php/5.5/php.ini // 追記 zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20121212/opcache.so opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1
fpmを再起動してOPcacheが読み込まれてるか確認
$ php -v PHP 5.5.20 (cli) (built: Jan 11 2015 23:52:35) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
ベンチマークとってみる
$ ab -n 100 -c 10 http://apc.localhost/php_info.php Time per request: 5.825 [ms] (mean) Time per request: 0.582 [ms] (mean, across all concurrent requests)
25%くらい早くなってる。
今回はphpinfoを出力しただけだったけど
php55とopcacheでけっこう早くなった。
これがwebアプリでフレームワークとか使ってると
ルーティングとかの共通処理が入ってるのでもっと早くなりそう。
合わせてAPCuも試してみたい。