デフォルト環境でのパフォーマンス測定が終わりましたので、高速化のチューニングを進めていきましょう。最初にPHPアクセラレータである「APC」を導入します。
導入の前に、PHPの実行プロセスを簡単に説明しておきます。PHPの実行プロセスは2段階で行われます。第一ステップとして、最初に人間が記述したPHPのソースコードを構文解析して中間コード(バイトコード)に変換します。第二ステップとして、変換された中間コードをPHP仮想マシンである「Zend Engine」が実行します。
PHPアクセラレータは、この第一ステップで生成された中間コードをキャッシュして、二度目からキャッシュされた中間コードを再利用します。該当するPHPのソースコードに変更が加えられていなければ、第一ステップを省略することでPHPの実行速度を向上させるPHPのモジュールです。PHPのソースコードに変更が加えられていた場合はキャッシュされた中間コードは破棄されますので、PHPアクセラレータの有無によってPHPの出力結果が変わることはありません。
PHPアクセラレータには幾つかの種類がありますが、今回は、比較的簡単に導入でき、実績も豊富なAPCを導入することにします。
まず、APCのインストールに必要なモジュールをyumでインストールします。
[root@ip www]# yum install php-devel php-pear gcc -y
次に、peclコマンドでAPCをインストールします。ウィザード形式でのインストールになりますが、全てEnterで進めてください。
[root@ip-172-30-1-150 www]# pecl install apc
gccによるコンパイルが完了すると、「apc.so」ファイルが生成されます。これがAPCの本体になります。次の内容を/etc/php.d/apc.iniとして保存してください。
extension = apc.so apc.shm_size = 128M apc.enable_cli = 1 ;apc.filters = filename
「apc.shm_size」は共有メモリとして利用するメモリサイズ、「apc.enble_cli」はCLI(Command Line Interface)版のPHPでもAPCを有効にするか否かの設定です。「;」でコメントアウトしてある「apc.filters」はAPCによる中間コードのキャッシュを除外するファイル名です。もしキャッシュによって問題が起きる場合は、ここへ除外するファイル名の一部を記述します。通常は不要です。
保存が終わりましたら、Apacheを再起動して変更を反映させます。
[root@ip www]# systemctl restart httpd
ブラウザに戻り、トップページをリロードしてください。初回のみ少し時間がかかりますが、2度目以降のリロードではページのロード時間が速くなっていることが確認できます。筆者の環境では、およそ70ms前後になりました。前述したデフォルト環境では176msでした。
続いてabコマンドで先ほどと同様のベンチマークを取ってみます。
[root@ip www]# ab -n 100 -c 10 http://ec2-xxx.xxx.compute.amazonaws.com/
筆者の環境では、Requests per secondが29.20となりました。まとめると以下になります。
APC導入後のパフォーマンス比較 | ページのロード時間 | 1秒当たりの同時アクセス数 |
---|---|---|
デフォルト環境 | 176ms | 11.24 |
APC導入後 | 70ms(約251%) | 29.20 |
APCの導入で、約2.5倍のパフォーマンス向上を果たせました。
次回は、今回の続きとして、CentOS 7の標準のリポジトリを利用する範囲で可能なAPC以外の高速化テクニックを解説します。お楽しみに。
1971年栃木県生まれ。中学1年生で電波新聞社の『マイコンBASICマガジン』にプログラムを寄稿して以来、プログラミング歴30年。早稲田大学法学部を卒業後、野村證券に入社。公認会計士第二次試験合格。2002年にプライム・ストラテジー株式会社を設立、代表取締役に就任する。2005年にPT. Prime Strategy Indonesiaを設立して以来、アジアでのITビジネスに携わる。執筆監訳書籍に『WordPressの教科書』シリーズ(SBクリエイティブ)、『詳解 WordPress』『WordPressによるWebアプリケーション開発』(ともにオライリー・ジャパン)などがある。
Copyright © ITmedia, Inc. All Rights Reserved.