データセンターダイレクト 紹介資料ダウンロード

10月 26

‘@msm’でググると「もしかして: @msn」と言われます。@msmです。

APC(php-apc)をCentOS 5へ入れてみましたので纏めてみました。

APCは、PHPを中間コードの状態でメモリ上にキャッシュし、次回アクセス時に高速化するモジュールです。同じようなものに、

  • APC(Alternative PHP Cache)
  • eAccelerator
  • PHPA(PHP Accelerator)
  • XCache

がありますが、今回は「YUMで入れたい」という理由でAPCをチョイスしました。
なお、PHPAは現時点でphp5に非対応です。

php-apcでPHPの高速化 on CentOS5

  1. YUMの設定
  2. APC、APC-ADMINのインストール
  3. ApacheBenchでの効果の確認

毎回書いていますが、以下の作業はいかなる場合も自己責任でお願いします。

1. YUMの設定

php-apcのあるSeaMew PRMsを、yumで利用できるようにします。

ココココを参考にsea-mew.repoというファイルを作成します。

# vi /etc/yum.repos.d/sea-mew.repo 

[sea-mew-noarch]
name=SeaMew Fedora AddIn Packages
baseurl=ftp://sea-mew.jp/yum/el5/noarch/
enabled=0
gpgcheck=0 

[sea-mew-common]
name=SeaMew Fedora AddIn Packages
baseurl=ftp://sea-mew.jp/yum/el5/i386
enabled=0
gpgcheck=0 

# Pentium4以上のCPUを利用している場合はコメントアウトを外すと良い
#[sea-mew-pentium4]
#name=SeaMew Fedora AddIn Packages
#baseurl=ftp://sea-mew.jp/yum/el5/i686
#enabled=0
#gpgcheck=0

私は上記のように「enabled=0」としているので、「yum search php-apc」としても、SeaMewのパッケージを検索することが出来ません。
sea-mewを検索対象にする時は、

# yum search php-apc --enablerepo=sea-mew-common,sea-mew-noarch

と検索しています。sea-mew-commonにphp-apcが見つかりました。

2. APC、APC-ADMINのインストール

YUMにてAPCをインストールします。今回は、同時に見つかったphp-apcのGUIである「php-apc-admin」もインストールしてみました。

#  yum install php-apc php-apc-admin --enablerepo=sea-mew-common

「apc-mmap.so」と「apc-sem.so」をコピーします。

# cp -a /usr/lib/php/extensions/apc-*.so /usr/lib/php/modules/

APCを有効にするため、Apacheを再起動します。

# apachectl graceful

phpinfoにて有効になっているかを確認します。

$ vi /var/www/phpinfo.php 

<?php
phpinfo();
?>

ブラウザで、http://IPアドレス/phpinfo.phpを開き、APC Supportがenabledになっていれば、インストールは成功しています。
apc.jpg

また、http://IPアドレス/php-apc/を表示すると、php-apcの管理画面を見ることが出来ます。(php-apc-adminを入れた場合)
apc2.jpg

3. ApacheBenchでの効果の確認

この実験を行ったサーバでは、WORDPRESSで構築しているブログサイトが運営されています。APOの効果がどのくらいあるのかをApacheBenchを使って実験してみます。

先に、php-apcを無効にしてApacheBenchで計測しました。

# vi /etc/php.d/99_apc.ini 

apc.enabled = 1
   ↓
;apc.enabled = 1
apc.enabled = 0

APCを無効にするため、Apacheを再起動します。

# apachectl graceful

100件のリクエストを10の同時接続で計測した結果です。<APC 無効>

#  ab -n 100 -c 10 http://127.0.0.1/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/ 

Benchmarking 127.0.0.1 (be patient).....done 

Server Software:        Apache
Server Hostname:        127.0.0.1
Server Port:            80 

Document Path:          /
Document Length:        22925 bytes 

Concurrency Level:      10
Time taken for tests:   47.86521 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      2313200 bytes
HTML transferred:       2292500 bytes
Requests per second:    2.12 [#/sec] (mean)
Time per request:       4708.652 [ms] (mean)
Time per request:       470.865 [ms] (mean, across all concurrent requests)
Transfer rate:          47.95 [Kbytes/sec] received 

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       2
Processing:  1835 4593 1808.7   4390   12566
Waiting:     1257 3452 1682.4   3161   11242
Total:       1836 4593 1808.8   4390   12568 

Percentage of the requests served within a certain time (ms)
  50%   4390
  66%   4951
  75%   5614
  80%   5753
  90%   6546
  95%   7322
  98%  11818
  99%  12568
 100%  12568 (longest request)

APCを有効にします。

# vi /etc/php.d/99_apc.ini 

;apc.enabled = 1
apc.enabled = 0
   ↓
apc.enabled = 1

Apacheを再起動します。

# apachectl graceful

100件のリクエストを10の同時接続で計測した結果です。<APC 有効>

# ab -n 100 -c 10 http://127.0.0.1/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/ 

Benchmarking 127.0.0.1 (be patient).....done 

Server Software:        Apache
Server Hostname:        127.0.0.1
Server Port:            80 

Document Path:          /
Document Length:        22895 bytes 

Concurrency Level:      10
Time taken for tests:   29.11494 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      2310200 bytes
HTML transferred:       2289500 bytes
Requests per second:    3.45 [#/sec] (mean)
Time per request:       2901.149 [ms] (mean)
Time per request:       290.115 [ms] (mean, across all concurrent requests)
Transfer rate:          77.76 [Kbytes/sec] received 

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       2
Processing:   954 2844 763.6   2785    4806
Waiting:      753 1783 548.2   1660    3085
Total:        954 2844 763.7   2785    4806 

Percentage of the requests served within a certain time (ms)
  50%   2785
  66%   3118
  75%   3352
  80%   3579
  90%   3967
  95%   4175
  98%   4396
  99%   4806
 100%   4806 (longest request)

APCをEnableにする事で、約48秒から約29秒に短縮できました。WORDPRESSの管理画面などもレスポンスも若干ですが上がっています。

投稿者: @msm
Trackback URL:

One Response to “php-apcでPHPの高速化 on CentOS5”

  1. PHP(というかWordPress)高速化のためにAPC(Alternatice PHP Cache)入れた - IDEA*IDEA ~ 百式管理人のライフハックブログ ~ Says:

    [...] php-apcでPHPの高速化 on CentOS5 | データセンター ダイレクト ブログ [...]

Leave a Reply