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