カテゴリー
Linux

php 5.5 へアップデートして APC から APCu と OPcache へ切り替えました♪

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 インストールと初期設定の確認、有効化が完了しました♪

おわりに

次のページが参考になりました。ありがとう存じます!

予想以上に簡単に導入できてホッとしましたわ♪

次は APCu と OPcache のチューニングかしらね!

以上です。

コメントを残す