CentOSのPHPを5.4から5.5にアップデート。OPcacheとAPCuも設定

2014年2月16日

PHP

CentOS の PHP を 5.4 から 5.5 にバージョンアップしたときの記録です。APC の代替手段として OPcache と APCu もインストールしています。導入にあたり実行したコマンドや php.ini の設定などを紹介します。

動作確認環境

  • CentOS 6.5

目次

  1. 更新前の PHP 5.4 は remi からインストール
  2. remi リポジトリの設定を確認
  3. 更新予定のパッケージを確認
  4. APC をアンインストール
  5. PHP を 5.4 から 5.5 に更新
  6. php.ini を設定
  7. mbstring 設定
  8. Zend OPcache をインストール
  9. APCu をインストール
  10. 動作確認

更新前の PHP 5.4 は remi からインストール

更新前の PHP 5.4 は、remi リポジトリからインストールしています。設定等は以下の記事にまとめてあります。

WordPress
お名前.com VPS にPHPをインストールし、APC、memcachedなど設定する

お名前.com VPS メモリ2G プランに Nginx で WordPress を構築するメモ、第7回目。前回はMyS ...

続きを見る

remi リポジトリの設定を確認

remi リポジトリには、PHP 5.5 を扱うためのリポジトリ remi-php55 が追加されています。remi-php55 が有効になっているかどうか、/etc/yum.repos.d/remi.repo を確認しましょう。

/etc/yum.repos.d/remi.repo

...
[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/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
...
# WARNING: If you enable this repository, you must also enable "remi"
[remi-php55-debuginfo]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch - debuginfo
baseurl=http://rpms.famillecollet.com/enterprise/6/debug-php55/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

remi-php55 の設定が見つからない場合は、yum update remi して remi リポジトリを更新してください。同じディレクトリに remi.repo.rpmnew というファイルができていると思いますので、diff をとって 差分を remi.repo にマージしてください。

# diff remi.repo remi.repo.rpmnew

更新予定のパッケージを確認

remi.repo の設定が終わったら、yum info を実行してみます。PHP 5.5 が Available Packages に表示されます。

# yum info php --enablerepo=remi-php55,remi

Installed Packages
Name        : php
Arch        : x86_64
Version     : 5.4.25
Release     : 1.el6.remi
Size        : 9.2 M
Repo        : installed
From repo   : remi
...
Available Packages
Name        : php
Arch        : x86_64
Version     : 5.5.9
Release     : 1.el6.remi
Size        : 2.5 M
Repo        : remi-php55
...

yum check-update コマンドも実行してみます。更新予定パッケージが表示されます。

# yum check-update --enablerepo=remi-php55,remi

php.x86_64                 5.5.9-1.el6.remi                  remi-php55
php-cli.x86_64             5.5.9-1.el6.remi                  remi-php55
php-common.x86_64          5.5.9-1.el6.remi                  remi-php55
php-fpm.x86_64             5.5.9-1.el6.remi                  remi-php55
php-intl.x86_64            5.5.9-1.el6.remi                  remi-php55
php-mbstring.x86_64        5.5.9-1.el6.remi                  remi-php55
php-pdo.x86_64             5.5.9-1.el6.remi                  remi-php55
php-pecl-apc.x86_64        3.1.15-0.4.20130912.el6.remi.5.5  remi-php55
php-pecl-igbinary.x86_64   1.1.2-0.5.git3b8ab7e.el6.remi.1   remi-php55
php-pecl-memcached.x86_64  2.1.0-7.el6.remi.5.5              remi-php55
php-process.x86_64         5.5.9-1.el6.remi                  remi-php55
php-xml.x86_64             5.5.9-1.el6.remi                  remi-php55
Obsoleting Packages
php-mysqlnd.x86_64         5.5.9-1.el6.remi                  remi-php55
    php-mysql.x86_64       5.4.25-1.el6.remi                 @remi
php-pecl-apcu.x86_64       4.0.3-1.el6.remi.5.5              remi-php55
    php-pecl-apc.x86_64    3.1.15-0.3.svn329913.el6.remi     @remi

php-mysql と php-pecl-apc が Obsoleting Packages になっていますね。注意しておきましょう。

APC をアンインストール

APC は PHP 5.5 では利用できませんので、更新前にアンインストールしておきます。

# yum remove php-pecl-apc

PHP を 5.4 から 5.5 に更新

yum update で PHP 5.4 から PHP 5.5 に更新します。

# yum update php --enablerepo=remi-php55,remi

Installing:
 php-mysqlnd         5.5.9-1.el6.remi                 remi-php55
     replacing  php-mysql.x86_64 5.4.25-1.el6.remi
Updating:
 php                 5.5.9-1.el6.remi                 remi-php55
Installing for dependencies:
 php-pecl-jsonc      1.3.3-1.el6.remi.5.5             remi-php55
 php-pecl-zip        1.12.4-1.el6.remi.5.5            remi-php55
Updating for dependencies:
 php-cli             5.5.9-1.el6.remi                 remi-php55
 php-common          5.5.9-1.el6.remi                 remi-php55
 php-fpm             5.5.9-1.el6.remi                 remi-php55
 php-intl            5.5.9-1.el6.remi                 remi-php55
 php-mbstring        5.5.9-1.el6.remi                 remi-php55
 php-pdo             5.5.9-1.el6.remi                 remi-php55
 php-pecl-igbinary   1.1.2-0.5.git3b8ab7e.el6.remi.1  remi-php55
 php-pecl-memcached  2.1.0-7.el6.remi.5.5             remi-php55
 php-process         5.5.9-1.el6.remi                 remi-php55
 php-xml             5.5.9-1.el6.remi                 remi-php55
Install       3 Package(s)
Upgrade      11 Package(s)
Is this ok [y/N]: y

問題なさそうなので、更新を実行します。実行すると何件か warning が出てきました。PHP 5.5 用の config ファイルが退避されたようです。diff をとって必要があれば merge しておきましょう。

warning: /etc/php.ini created as /etc/php.ini.rpmnew
warning: /etc/httpd/conf.d/php.conf created as /etc/httpd/conf.d/php.conf.rpmnew
warning: /etc/php-fpm.d/www.conf created as /etc/php-fpm.d/www.conf.rpmnew

php.ini.rpmnew 等のファイルは、PHP 5.5 のデフォルト php.ini です。削除せずに、php.ini.org 等の名前にして保存しておくことをおすすめします。設定をデフォルトに戻したい時に役立ちます。

php.ini を設定

php.ini のデフォルトからの変更点です。

/etc/php.ini

expose_php = Off
error_reporting = E_ALL & ~E_STRICT
display_errors = Off
error_log = /var/log/php.log
default_charset = "UTF-8"
date.timezone = Asia/Tokyo
session.cookie_secure = 1
session.cookie_httponly = 1
session.hash_function = 1
short_open_tag = Off

mbstring 設定

mbstring.iniのデフォルトからの変更点です

/etc/php.d/mbstring.ini

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII

mbstring の設定はマニュアルをご確認ください。

mbstring 設定 | PHP manual

Zend OPcache をインストール

Zend OPcache をインストールしてオペコードキャッシュを有効にします。オペコードキャッシュとは、コンパイル後のコードをメモリに保存して再利用することでパフォーマンスを向上させる仕組みです。PHP 5.4 までは APC でオペコードキャッシュを利用するのが一般的でした。

# yum install php-opcache --enablerepo=remi-php55,remi

設定サンプルです。

/etc/php.d/opcache.ini

[opcache]
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

設定の詳細、デフォルト値はマニュアルをご確認ください。

OPcache 実行時設定 - PHP Manual

Opcache の設定は opcache-status を見ながら調整すると良いと思います。

rlerdorf/opcache-status - GitHub

opcache.php にブラウザからアクセスしてモニタ表示します。

opcache-status

APCu をインストール

APC の代替手段としてインストールした OPcache は、ユーザーキャッシュ機能を持っていないので、APCu で補います。ユーザーキャッシュとは、オブジェクトや変数をメモリに保存して、別のリクエストからそれを再利用することでパフォーマンスを向上させる仕組みです。ユーザーキャッシュを利用するには、APCu の提供する関数を使用します。

# yum install php-pecl-apcu --enablerepo=remi-php55,remi

設定サンプルです。

/etc/php.d/apcu.ini

apc.enabled=1
apc.enable_cli=1
apc.shm_size=32M
apc.ttl=3600
apc.gc_ttl=3600
apc.mmap_file_mask=/tmp/apc.XXXXXX

設定の詳細、デフォルト値はマニュアルをご確認ください。APCu のインターフェースは APC と同じです。

APC 実行時設定 - PHP Manual

APCu の設定はモニタを見ながら調整します。

krakjoe/apcu - GitHub

apc.php にブラウザからアクセスしてモニタを表示します。

apcu-monitor
APC の代替のために APCu を入れましたが、APC のユーザーキャッシュ機能を利用していなければ入れなくてもいいと思います。

動作確認

Apache、Nginx、php-fpm を再起動して、php -v コマンドや、phpinfo を確認します。

# php -v

PHP 5.5.9 (cli) (built: Feb 11 2014 08:20:23)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

参考サイト

PHP 5.5ネーティブキャッシュの話

-技術ブログ
-