ハマログ

株式会社イーツー・インフォの社員ブログ

APC導入でPHPのパフォーマンスアップ

こんにちは池島です。PHPにAPCを導入したのでその時の記録を書きます。
導入した環境はCentOS 6.6です。

ネットで探してみたところ下記のコマンドで入れられるようです。
yum install php-pecl-apc
結果、次メッセージ出してエラーとなってしまいました。

読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package php-pecl-apc.x86_64 0:3.1.9-2.el6 will be インストール
--> 依存性の処理をしています: php(zend-abi) = 20090626 のパッケージ: php-pecl-apc-3.1.9-2.el6.x86_64
--> 依存性の処理をしています: php(api) = 20090626 のパッケージ: php-pecl-apc-3.1.9-2.el6.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: php-pecl-apc-3.1.9-2.el6.x86_64 (base)
             要求: php(api) = 20090626
            インストール: php-common-5.5.19-2.el6.remi.x86_64 (@remi-php55)
                php(api) = 20121113-64
            利用可能: php-common-5.3.3-38.el6.x86_64 (base)
                php(api) = 20090626
            利用可能: php-common-5.3.3-40.el6_6.x86_64 (updates)
                php(api) = 20090626
エラー: パッケージ: php-pecl-apc-3.1.9-2.el6.x86_64 (base)
             要求: php(zend-abi) = 20090626
            インストール: php-common-5.5.19-2.el6.remi.x86_64 (@remi-php55)
                php(zend-abi) = 20121212-64
            利用可能: php-common-5.3.3-38.el6.x86_64 (base)
                php(zend-abi) = 20090626
            利用可能: php-common-5.3.3-40.el6_6.x86_64 (updates)
                php(zend-abi) = 20090626
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

ネット探してみたところyumで読み込んでいるリポジトリがダメみたいですね。
remiを使えば大丈夫みたいです。
yum install php-pecl-apc –enablerepo=remi

読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * remi: mirrors.thzhost.com
 * updates: ftp.iij.ad.jp
remi                                                                            | 2.9 kB     00:00
remi/primary_db                                                                 | 1.0 MB     00:01
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package php-pecl-apc.x86_64 0:3.1.15-0.4.20130912.el6.remi.5.4 will be インストール
--> 依存性の処理をしています: php(zend-abi) = 20100525-x86-64 のパッケージ: php-pecl-apc-3.1.15-0.4.20130912.el6.remi.5.4.x86_64
--> 依存性の処理をしています: php(api) = 20100412-x86-64 のパッケージ: php-pecl-apc-3.1.15-0.4.20130912.el6.remi.5.4.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: php-pecl-apc-3.1.15-0.4.20130912.el6.remi.5.4.x86_64 (remi)
             要求: php(zend-abi) = 20100525-x86-64
            インストール: php-common-5.5.19-2.el6.remi.x86_64 (@remi-php55)
                php(zend-abi) = 20121212-64
            利用可能: php-common-5.3.3-38.el6.x86_64 (base)
                php(zend-abi) = 20090626
            利用可能: php-common-5.3.3-40.el6_6.x86_64 (updates)
                php(zend-abi) = 20090626
            利用可能: php-common-5.4.35-1.el6.remi.x86_64 (remi)
                php(zend-abi) = 20100525-x86-64
            利用可能: php-common-5.4.36-1.el6.remi.x86_64 (remi)
                php(zend-abi) = 20100525-x86-64
エラー: パッケージ: php-pecl-apc-3.1.15-0.4.20130912.el6.remi.5.4.x86_64 (remi)
             要求: php(api) = 20100412-x86-64
            インストール: php-common-5.5.19-2.el6.remi.x86_64 (@remi-php55)
                php(api) = 20121113-64
            利用可能: php-common-5.3.3-38.el6.x86_64 (base)
                php(api) = 20090626
            利用可能: php-common-5.3.3-40.el6_6.x86_64 (updates)
                php(api) = 20090626
            利用可能: php-common-5.4.35-1.el6.remi.x86_64 (remi)
                php(api) = 20100412-x86-64
            利用可能: php-common-5.4.36-1.el6.remi.x86_64 (remi)
                php(api) = 20100412-x86-64
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest

うまく行きませんでした。でもメッセージに「remi-php55」とあります。
そうです。PHPは5.5系をインストールしていました。
ならばということで試しに次のコマンドを実行。
yum install php-pecl-apc –enablerepo=remi-php55

うまくインストールできました!
php-pecl-apcu.x86_64 4.0.7-1.el6.remi.5.5 @remi-php55

インストール後はhttpd再起動でAPCが有効になります。
速度の違いを確認するため再起動前にApacheBenchで測定してみます。
abs -n 100 -c 10 https://xxxx.co.jp/

Server Software:        Apache
Server Hostname:        xxx.co.jp
Server Port:            xxxxx
SSL/TLS Protocol:       TLSv1,DHE-RSA-AES256-SHA,2048,256

Document Path:          /
Document Length:        36595 bytes

Concurrency Level:      10
Time taken for tests:   19.985 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      3699600 bytes
HTML transferred:       3659500 bytes
Requests per second:    5.00 [#/sec] (mean)
Time per request:       1998.503 [ms] (mean)
Time per request:       199.850 [ms] (mean, across all concurrent requests)
Transfer rate:          180.78 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       80  283 926.3    140    7754
Processing:   480 1040 565.5    850    2895
Waiting:      440 1001 559.7    804    2845
Total:        620 1323 1074.9   1000    8594

Percentage of the requests served within a certain time (ms)
  50%   1000
  66%   1080
  75%   1212
  80%   1814
  90%   2250
  95%   2930
  98%   6471
  99%   8594
 100%   8594 (longest request)

続いてhttpdを再起動して再度チェック。

Server Software:        Apache
Server Hostname:        xxx.co.jp
Server Port:            xxxxx
SSL/TLS Protocol:       TLSv1,DHE-RSA-AES256-SHA,2048,256

Document Path:          /
Document Length:        36595 bytes

Concurrency Level:      10
Time taken for tests:   13.596 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      3699600 bytes
HTML transferred:       3659500 bytes
Requests per second:    7.36 [#/sec] (mean)
Time per request:       1359.604 [ms] (mean)
Time per request:       135.960 [ms] (mean, across all concurrent requests)
Transfer rate:          265.73 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       80  171 162.8    130    1174
Processing:   500 1073 840.9    813    6924
Waiting:      480 1037 837.3    793    6924
Total:        620 1244 951.0    938    7864

Percentage of the requests served within a certain time (ms)
  50%    938
  66%   1003
  75%   1066
  80%   1106
  90%   2425
  95%   2635
  98%   4513
  99%   7864
 100%   7864 (longest request)

Requests per secondが5.00⇒7.36まで増えました。導入の効果はあったようです。

ちなみにAPCのオンオフの切替は「/etc/php.d/acpu.ini」で「apc.enabled」を設定することで切替できます。オンオフの確認は「php – i | grep apc」で確認します。

/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

  池島 篤則   2015年1月18日


関連記事

GNU dateで環境変数に持つ日時文字列の操作

背景など shellで日付の操作を行いたいと思いました その利用例はこんな感じで…

プロジェクト管理のテクニックについて少し調べてみた

プロジェクト管理のテクニックについてCopliotに聞いてみました プロジェクト…

PHPでMessagePackを利用する

はじめに PHPでMessagePackを利用してみます。 MessagePac…


← 前の投稿

次の投稿 →