PHP 5.5 にそろそろアップデートしたいです!そしてアップデートしますと、キャッシュすることでパフォーマンス向上に貢献してくださった APC が使えなくなってしまうとのこと。代わりに、APCu と OPcache が使えるとのことで、インストールいたしました。
- Zend OPcache はオペコードキャッシュ(コンパイル後のコードをメモリに保存して再利用)
- APCu はユーザーキャッシュ(オブジェクトや変数をメモリに保存して、別のリクエストからそれを再利用)
- APC はオペコードキャッシュ + ユーザーキャッシュ
今回はその記録をノートいたします。
作業前の状態
- PHP 5.4.33
- pecl/APC 3.1.15dev
- Remi リポジトリ導入済み
- Apache ではなく、nginx
- PHP は php-fpm
1.PHP 5.5 をインストールできるかどうか、Remi リポジトリの設定を確認
vim /etc/yum.repos.d/remi.repo
[remi-php55] が存在するものの、有効ではないことを確認
[remi-php55] name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 5 - $basearch #baseurl=http://rpms.famillecollet.com/enterprise/5/php55/$basearch/ mirrorlist=http://rpms.famillecollet.com/enterprise/5/php55/mirror # WARNING: If you enable this repository, you must also enable "remi" enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
2.APC を停止(アンインストールしない)
vim /etc/php.d/apc.ini
修正前
; This can be set to 0 to disable APC. ;apc.enabled=1
修正後
; This can be set to 0 to disable APC. apc.enabled=0
apc.enabled のデフォルトは 1 なので、コメント化されていても 1 です。
よって、APC を無効化するために、コメントを外し、0 を設定いたしました。
nginx、php-fpm を再起動します。
/etc/init.d/nginx restart /etc/init.d/php-fpm restart
そして、無効になったことを確認します。
php -i | grep apc.enabled
次のように表示され、APC が無効になったことが確認できました。
apc.enabled => Off => Off
3.PHP5.5 へアップデート
先ほど Remi リポジトリ設定を確認して、存在するものの有効ではありませんでしたので、yum でアップデートするときに指定して有効にいたします。
また、remi-php55 だけではなく remi も指定しないと、依存の関係でエラーとなりましたので注意!
yum --enablerepo=remi,remi-php55 update
次のパッケージがインストール、アップデートされました。
=============================================================================================== Package Arch Version Repository Size =============================================================================================== Installing: php-mysqlnd i386 5.5.17-1.el5.remi remi-php55 341 k replacing php-mysql.i386 5.4.33-1.el5.remi php-pecl-apcu i386 4.0.6-1.el5.remi.5.5 remi-php55 103 k replacing php-pecl-apc.i386 3.1.15-0.4.20130912.el5.remi.5.4 Updating: curl i386 7.27.0-11.el5.remi remi-php55 261 k libcurl i386 7.27.0-11.el5.remi remi-php55 221 k php i386 5.5.17-1.el5.remi remi-php55 2.9 M php-cli i386 5.5.17-1.el5.remi remi-php55 4.3 M php-common i386 5.5.17-1.el5.remi remi-php55 1.2 M php-devel i386 5.5.17-1.el5.remi remi-php55 1.4 M php-fpm i386 5.5.17-1.el5.remi remi-php55 1.4 M php-gd i386 5.5.17-1.el5.remi remi-php55 88 k php-imap i386 5.5.17-1.el5.remi remi-php55 85 k php-mbstring i386 5.5.17-1.el5.remi remi-php55 1.2 M php-mcrypt i386 5.5.17-1.el5.remi remi-php55 48 k php-pdo i386 5.5.17-1.el5.remi remi-php55 119 k php-process i386 5.5.17-1.el5.remi remi-php55 64 k php-xml i386 5.5.17-1.el5.remi remi-php55 282 k Installing for dependencies: fontconfig i386 2.4.1-7.el5 base 174 k gd-last i386 2.1.0-3.el5.remi remi 140 k php-pecl-jsonc i386 1.3.6-1.el5.remi.5.5.1 remi-php55 72 k php-pecl-jsonc-devel i386 1.3.6-1.el5.remi.5.5.1 remi-php55 25 k php-pecl-zip i386 1.12.4-1.el5.remi.5.5 remi-php55 319 k Transaction Summary =============================================================================================== Install 7 Package(s) Upgrade 14 Package(s) …略… Installed: php-mysqlnd.i386 0:5.5.17-1.el5.remi php-pecl-apcu.i386 0:4.0.6-1.el5.remi.5.5 Dependency Installed: fontconfig.i386 0:2.4.1-7.el5 gd-last.i386 0:2.1.0-3.el5.remi php-pecl-jsonc.i386 0:1.3.6-1.el5.remi.5.5.1 php-pecl-jsonc-devel.i386 0:1.3.6-1.el5.remi.5.5.1 php-pecl-zip.i386 0:1.12.4-1.el5.remi.5.5 Updated: curl.i386 0:7.27.0-11.el5.remi libcurl.i386 0:7.27.0-11.el5.remi php.i386 0:5.5.17-1.el5.remi php-cli.i386 0:5.5.17-1.el5.remi php-common.i386 0:5.5.17-1.el5.remi php-devel.i386 0:5.5.17-1.el5.remi php-fpm.i386 0:5.5.17-1.el5.remi php-gd.i386 0:5.5.17-1.el5.remi php-imap.i386 0:5.5.17-1.el5.remi php-mbstring.i386 0:5.5.17-1.el5.remi php-mcrypt.i386 0:5.5.17-1.el5.remi php-pdo.i386 0:5.5.17-1.el5.remi php-process.i386 0:5.5.17-1.el5.remi php-xml.i386 0:5.5.17-1.el5.remi Replaced: php-mysql.i386 0:5.4.33-1.el5.remi php-pecl-apc.i386 0:3.1.15-0.4.20130912.el5.remi.5.4 Complete!
ゆくゆくは削除する予定と思っておりましたけれども、この段階で APC は php-pecl-apc から php-pecl-apcu に置き換えられていますね。
また、APC の設定ファイル /etc/php.d/apc.ini も /etc/php.d/apc.ini.rpmsave に置き換えられ、無効になっています。
代わりに、/etc/php.d/apcu.ini が作成されています。
3.5.APC をアンインストールしないで停止した理由は PHP5.5 へのアップデートで APC が APCu へ自動的に置き換わるから♪あと、APCu の初期設定内容
一旦 APC をアンインストールして、APCu をインストールする手間が省けます♪
ただ、、、このことは実は狙ってではなく、偶然気がついたのですけれどもね、てへっ♪
ちなみに、APCu の設定は次のコマンドで調べました。APCu がパッケージですけれども、設定で使用される名前は apc なのですね。
php -i | grep apc
そして、初期設定値は次のようになります。
Additional .ini files parsed => /etc/php.d/apcu.ini, apc apcu MMAP File Mask => /tmp/apc.XXXXXX apc.coredump_unmap => Off => Off apc.enable_cli => Off => Off apc.enabled => On => On apc.entries_hint => 4096 => 4096 apc.gc_ttl => 3600 => 3600 apc.mmap_file_mask => /tmp/apc.XXXXXX => /tmp/apc.XXXXXX apc.preload_path => no value => no value apc.rfc1867 => Off => Off apc.rfc1867_freq => 0 => 0 apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS apc.rfc1867_prefix => upload_ => upload_ apc.rfc1867_ttl => 3600 => 3600 apc.serializer => php => php apc.shm_segments => 1 => 1 apc.shm_size => 32M => 32M apc.slam_defense => On => On apc.smart => 0 => 0 apc.ttl => 0 => 0 apc.use_request_time => On => On apc.writable => /tmp => /tmp
4.OPcache インストール
yum --enablerepo=remi,remi-php55 install php-opcache
インストール時点で、すでに有効となっているようです。
4.5.OPcache 設定確認
こちらのページの推奨設定に設定しようかと思いましたけれども、調べてみますと既に推奨の値がセットされております。ただ、次の設定のみ異なり、インストール直後のままといたしました。
opcache.revalidate_freq => 2 => 2 がインストール直後の設定で、参考ページの設定は 60 です。
opcache.revalidate_freq は「更新のためにスクリプトのタイムスタンプをチェックする頻度。(秒単位)」で 60 にすると、60秒毎にキャッシュするかどうかをチェックする理解でよさそうですね。
ちなみに、使用した設定を調べるコマンドです。
php -i | grep opcache
そして、インストール直後の設定です。
/etc/php.d/opcache.ini, opcache.blacklist_filename => /etc/php.d/opcache*.blacklist => /etc/php.d/opcache*.blacklist opcache.consistency_checks => 0 => 0 opcache.dups_fix => Off => Off opcache.enable => On => On opcache.enable_cli => Off => Off opcache.enable_file_override => Off => Off opcache.error_log => no value => no value opcache.fast_shutdown => 1 => 1 opcache.file_update_protection => 2 => 2 opcache.force_restart_timeout => 180 => 180 opcache.inherited_hack => On => On opcache.interned_strings_buffer => 8 => 8 opcache.load_comments => 1 => 1 opcache.log_verbosity_level => 1 => 1 opcache.max_accelerated_files => 4000 => 4000 opcache.max_file_size => 0 => 0 opcache.max_wasted_percentage => 5 => 5 opcache.memory_consumption => 128 => 128 opcache.optimization_level => 0xFFFFFFFF => 0xFFFFFFFF opcache.preferred_memory_model => no value => no value opcache.protect_memory => 0 => 0 opcache.restrict_api => no value => no value opcache.revalidate_freq => 2 => 2 opcache.revalidate_path => Off => Off opcache.save_comments => 1 => 1 opcache.use_cwd => On => On opcache.validate_timestamps => On => On
最後に、ウェブサーバを再起動して、設定を反映させます。
/etc/init.d/nginx restart /etc/init.d/php-fpm restart
以上で PHP5.5 へのアップデートと、APC アンインストール、APCu、OPcache インストールと初期設定の確認、有効化が完了しました♪
おわりに
次のページが参考になりました。ありがとう存じます!
- CentOSのPHPを5.4から5.5にアップデート。OPcacheとAPCuも設定
- ZendOpcacheとAPCuではじめるハイパフォーマンスPHP – pixiv engineering blog
予想以上に簡単に導入できてホッとしましたわ♪
次は APCu と OPcache のチューニングかしらね!
以上です。