eAcceleratorを使ったPHPの高速化について

ブログを公開するにあたってハードは、玄箱HGをOSは、Linux(Debian/etch)をブログには、wordpressを使用しているのですが、玄箱HGのCPUが非力なため、PHPの表示が非常に遅いです。今回は、このPHPの速度を改善しようとeAcceleratorというPHP高速化ツールを導入してみました。

アクセレータとは、PHPの実行時に作成される中間コードをキャッシュし、次回の実行時には、キャッシュされた中間コードを再利用して実行時のオーバーヘッドを軽減し、PHPの高速化を実現する仕組みのことです。PHP5を使用できることを条件にアクセレータを選ぶと選択肢は、「eAccelerator」が「APC」になるようでそのうち、「eAccelerator」の方が高速であることから、「eAccelerator」を使用することにしました。

eAcceleratorのインストール

まずは、ソースの入手から。SourceForge:eAcceleratorより最新版を入手します。2009年02月時点での最新版は、「eAccelerator 0.9.5.2」でした。PHP5.4に対応しているソースはeAcceleratorよりダウンロードします。2012年11月時点での最新版は、「eaccelerator-eaccelerator-42067ac.tar.gz」でした。

次にインストール前の準備です。「php-config」の場所を調べるために、次のコマンドを実行します。

user001@kuroboxfo:~$ which php-config
/usr/bin/php-config

「/usr/bin/php-config」が、知りたい情報なのでメモしておきます。次にApacheの実行ユーザを調べます。

user001@kuroboxfo:~$ ps aux  | grep apache
root     31585  0.0  2.7  62480  3456 ?        Ss   Feb15   0:00 /usr/sbin/apache2 -k start
www-data  5339  0.0  4.1  62884  5340 ?        S    11:24   0:00 /usr/sbin/apache2 -k start
www-data  5379  1.3 10.3  63488 13128 ?        S    11:29   0:04 /usr/sbin/apache2 -k start
www-data  5404  0.0  1.5  62620  2016 ?        S    11:32   0:00 /usr/sbin/apache2 -k start
user001   5448  0.0  0.6   4064   876 pts/0    S+   11:35   0:00 grep apache

Debianの場合は、「www-data」が実行ユーザになります。次に「phpize」コマンドの存在を確認します。

eiichi@kuroboxfo:~$ which phpize
/usr/bin/phpize

上記のようにパスが表示されれば、インストールされているのですが、表示されない場合には、「php5-dev」インストールします。Debainでは、「php5-dev」パッケージが存在するのでインストールします。以上で準備完了です。実際にインストールを始めます。インストールの手順は、次のとおりです。

  1. ダウンロードしたソースファイルの解凍
  2. 「phpize」コマンドの実行
  3. 「configure」スクリプトの実行
  4. 「make」コマンドの実行
  5. 「make install」コマンドの実行

3番目の「configure」スクリプトの実行時に、「php-config」の場所(「/usr/bin/php-config」)とApacheの実行ユーザ(「www-data」)の情報が必要になります。また、5番目の「make install」コマンドの実行時には、「sudo」コマンドや「su -」コマンドを使用し、rootユーザで実行する必要があります。

user001@kuroboxfo:~$ tar -jxvf eaccelerator-0.9.5.2.tar.bz2
user001@kuroboxfo:~$ cd eaccelerator-0.9.5.2

user001@kuroboxfo:~/eaccelerator-0.9.5.2$ phpize

user001@kuroboxfo:~/eaccelerator-0.9.5.2$ ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config -with-eaccelerator-userid=www-data

user001@kuroboxfo:~/eaccelerator-0.9.5.2$ make

user001@kuroboxfo:~/eaccelerator-0.9.5.2$ sudo make install

このときの結果表示の最終行に「Installing shared extensions: /usr/lib/php5/20060613+lfs/」とインストール先のディレクトリ情報が表示されるのでメモしておきます。

キャッシュ用のディレクトリ作成とコントロール用phpファイルの準備

キャッシュファイルを保存するディレクトリを作成します。作成するディレクトリは、「/tmp/eaccelerator」で作成後は、パーミッションの設定をしておきます。

user001@kuroboxfo:~$ mkdir /tmp/eaccelerator
user001@kuroboxfo:~$ sudo chown www-data.www-data /tmp/eaccelerator

次に、eAcceleratorのコントロール用phpファイルを準備します。ダウンロードしたファイルを解凍したディレクトリ内に「control.php」があるのですが、このファイルをウェブ公開可能ディレクトリに移動します。このファイルにアクセスするとウェブ上でeAcceleratorの動作状況や、起動、停止、キャッシュの削除が可能になります。

user001@kuroboxfo:~$ sudo mkdir /var/www/eaccelerator
user001@kuroboxfo:~$ sudo cp eaccelerator-0.9.5.2/control.php /var/www/eaccelerator

設定ファイルの作成

eAcceleratorの設定は、「php.ini」に追記する必要があります。Debianの場合には、「/etc/php5/conf.d/」ディレクトリ内に設定ファイルを置けば、「php.ini」に追記するのと同じ効果なので、「eaccelerator.ini」ファイルを作成し、設定を記述します。内容は、次のとおりです。

[eaccelerator]
zend_extension="/usr/lib/php5/20060613+lfs/eaccelerator.so"
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "/tmp/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = "0"
eaccelerator.log_file = "/var/log/apache2/eaccelerator.log"
eaccelerator.name_space = ""
eaccelerator.check_mtime = "1"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "3600"
eaccelerator.shm_prune_period = "120"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys     = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content  = "shm_and_disk"
eaccelerator.allowed_admin_path = "/var/www/eaccelerator/control.php"

設定内容は、次のとおり。

zend_extension
インストール時(make install)の最終行に表示されたインストール先ディレクトリを元にモジュールファイルのフルパスを設定します。
eaccelerator.shm_size
eAcceleratorが使用する共有メモリサイズをMB単位で指定します。デフォルト値は「0」でこの場合は、OSのデフォルト値を使用します。OSのデフォルト値は、「/proc/sys/kernel/shmmax」を参照すれば、確認できます。「cat /proc/sys/kernel/shmmax」を実行し、表示されたメモリサイズ(単位は、バイト)を確認します。
eaccelerator.cache_dir
ディスクキャッシュを保存するディレクトリを指定します。デフォルト値は、「/tmp/eaccelerator」です。
eaccelerator.enable
eAcceleratorを有効にするかどうを設定します。「0」を設定すると無効、「1」を設定すると有効になります。デフォルト値は、「1」です。

eaccelerator.optimizer
コード実行の速度を上げるオプティマイザーを有効にするかどうを設定します。「0」を設定すると無効、「1」を設定すると有効になります。デフォルト値は、「1」です。

eaccelerator.debug
デバッグモードを有効にするかどうを設定します。「0」を設定すると無効、「1」を設定すると有効になります。有効にすると、ファイルのキャッシュヒットの情報が、ログファイルに出力されます。デフォルト値は、「0」です。
eaccelerator.log_file
eAcceleratorのログ出力先を設定します。設定がない場合には、標準エラーに出力されるので、Apacheのエラーログに出力されます。Debianでは、Apacheのエラーログは、「/var/log/apache2/error.log」です。
eaccelerator.name_space
キャッシュファイルのキー情報に付加する文字列を指定します。デフォルトの場合には、Apacheのバーチャルホストで設定されているホスト名(ServerName)が使用され、異なるホスト名のキャッシュファイルでも、キー情報が重ならないようになっています。この値を設定すると、バーチャルホスト上で同一のキー情報が使用され、キャッシュを共有するようになります。デフォルト値は、「””」です。
eaccelerator.check_mtime
phpファイルの変更チェックを有効にするかどうを設定します。「0」を設定すると無効、「1」を設定すると有効になります。有効にすると、ファイルのチェックのために若干のオーバーヘッドが発生しますが、自動で変更内容がキャッシュに反映されます。無効にするとphpファイルの変更があった場合に、手動でキャッシュを削除するまで変更されたキャッシュが作成されません。デフォルト値は、「1」です。
eaccelerator.filter
キャッシュするファイルや、キャッシュしないファイルを設定します。キャッシュするファイルを指定する場合は、「*.php」など「*」を使用し、キャッシュしないファイルを指定する場合は、「!*.phtml」など、先頭に「!」をつけます。あるディレクトリ「/AAAAA」にあるファイル全部をキャッシュしない場合などは、「!/AAAAAA*」とします。デフォルト値は、「””」でこの場合には、すべてのphpファイルをキャッシュします。
eaccelerator.shm_max
キャッシュファイルの最大サイズを設定します。設定できる値は、「0」「10240」「10K」「1M」です。デフォルト値は、「0」で制限を使用しない設定です。
eaccelerator.shm_ttl
新しいスクリプトをキャッシュする時に共有メモリ上に空きがない場合、設定値以上の秒数アクセスがない古いキャッシュを全て削除します。デフォルト値は、「0」で削除しない設定になっています。
eaccelerator.shm_prune_period
スクリプトをキャッシュする時に共有メモリ上に空きがない場合、前回のキャッシュ削除から、設定値以上の秒数が経過している場合に再度古いキャッシュを削除します。デフォルト値は、「0」で削除しない設定になっています。

eaccelerator.shm_only
共有メモリキャッシュだけを使用(ディスクキャッシュを使用しない)するかどうを設定します。「0」を設定すると共有メモリ、ディスクともに使用し、「1」を設定すると共有キャッシュのみの使用になります。
eaccelerator.compress
キャッシュファイルの圧縮を有効にするかどうかを設定します。「0」を設定すると無効、「1」を設定すると有効になります。デフォルト値は、「1」です。

eaccelerator.compress_level
キャッシュの圧縮レベルを指定します。設定できるレベルは、「1」から「9」です。デフォルト値は、「9」です。
eaccelerator.keys eaccelerator.session eaccelerator.content
それぞれのキャッシュの保存先をしてします。指定できる値は、「shm_and_disk」(共有メモリとディスクに保存)、「shm」(基本的に共有メモリだがshm_sizeやshm_maxを超えた場合にはディスクに保存)、「shm_only」(共有メモリにのみ保存)、「disk_only」(ディスクにのみ保存)、「none」(データをキャッシュしない)の5種類。デフォルト値は、・shm_and_disk」です。
eaccelerator.allowed_admin_path
eAcceleratorのコントロールファイルのフルパス(OS上でのファイル名を含めたフルパス)を設定します。この設定がないとコントロールファイルがうまく動作しません。

eAcceleratorを有効にするには

最後に、eAcceleratorを有効にします。Apacheを再起動すれば、有効になります。稼動状態は、「URL:http://www.hogehoge.com/eaccelerator/control.php」にアクセスすれば、確認できます。

キャッシュしたくないサイトの設定

キャッシュしたくないサイトには、「.htaccess」ファイルを作成し、次の2行を追加します。

php_flag eaccelerator.enable 0
php_flag eaccelerator.optimizer 0
スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする