案内編論文編書籍編雑記編

さくらの VPS 設定覚書(4)PHP

PHP(Hypertext Preprocessor)は、動的にウェブページを生成するプログラミング言語で、WordPress, Mediawiki, phpBB など、多くのウェブ・アプリケーションで採用されている代表的なスクリプト言語です。ここでは、PHP の拡張モジュールである APC と memcached をインストールすることで、キャッシュを利用することで、ウェブ・アプリケーションを高速化する方法を解説します。

1. PHP

ルート権限がある状態で、PHP の設定ファイルを開きます。

vi /etc/php.ini

必要に応じて、以下の設定変更を行います。

1.1. PHP の情報の非開示

セキュリティを高めるために、PHP のバージョンを外部に表示しないようにします。

expose_php = On
     ↓
expose_php = Off

1.2. メモリの上限設定

デフォルトの制限値が低すぎて、メモリ制限エラーが出るようなときは、以下のように引き上げましょう。各設定項目は離れた位置にあるので、一つずつ“/キーワード”で検索して探してください。

memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M
     ↓(例)
memory_limit = 1024M
post_max_size = 256M
upload_max_filesize =128M

値は任意ですが、memory_limit > post_max_size > upload_max_filesize となるように設定しなければなりません。

1.3. 時間帯の設定

PHP のタイムゾーンを日本の時間帯にします。

;date.timezone =
     ↓
date.timezone = "Asia/Tokyo"

1.4. 文字コードの設定

日本語などマルチバイト文字が使えるようにします。

;mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
     ↓
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = auto

設定が終わったら、保存して閉じます。

2.APC

APC は、Alternative PHP Cache の頭文字をとったもので、PHP の中間コードのキャッシュや最適化を行います。似たようなモジュールに eAccelerator や XCache などがありますが、APC は、次期 PHP6 で公式にバンドルされる予定なので、最も将来性があります。

2.1. PECL によるインストールと設定

APC をまだインストールしていない場合は、

yum --enablerepo=remi,epel,rpmforge install php-pecl-apc

でインストールしてください。

インストール後、PHP の設定ファイルを開きます。

vi /etc/php.ini

適当な場所(一番下など)に以下のように書き込みます。

extension=apc.so
apc.enabled  = 1
apc.shm_size = 288M
apc.max_file_size = 144M
apc.gc_ttl   = 3600
apc.ttl      = 7200
  • apc.enabled : APC を有効にするか否かのオプション。0 だと無効で、1 だと有効になります。
  • apc.shm_size : APC に割り当てる共有メモリサイズ。単位はバイトなので、Mを付けることを忘れてはいけません。使用する PHP アプリケーションの数を n とすると、32(n+1) が最適値です。
  • apc.max_file : キャッシュするファイルの上限値。デフォルトは 1M です。
  • apc.gc_ttl : キャッシュ・エントリがガベージ・コレクションのリストに残る秒数。上の例だと一時間。
  • apc.ttl : ユーザ・キャッシュ・エントリが、他のエントリに割り当てられるまでスロットに残っている秒数の上限。

設定を終えたら、保存して閉じ、 Apache を再起動します。

/etc/init.d/httpd restart

2.2. ソースコードによるインストールと設定

ソースコードからインストールするには、まず、ソースコード・ディレクトリに移行します。

cd /usr/local/src

Alternative PHP Cacheで最新のバージョン(ここでは、3.1.9)を確認して、圧縮ファイルをダウンロードします。

wget http://pecl.php.net/get/APC-3.1.9.tgz

解凍します。

tar -zxvf APC-3.1.9.tgz

解凍したファイルに移行します。

cd APC-3.1.9

ビルドします。

phpize

設定ファイルのディレクトリを探します。

whereis php-config

通常は、“/usr/bin/php-config”にあるので、その場合、APC を有効にするコマンドは、以下のようになります。

./configure --enable-apc --enable-apc-mmap --with-apxs --with-php-config=/usr/bin/php-config

コンパイルします。

make

コンパイルしたファイルをインストールします。

make install

次に、設定ファイルを作ります。

vi /etc/php.d/apc.ini

例えば、以下のように設定します。

extension=apc.so
apc.enabled  = 1
apc.shm_size = 288M
apc.max_file_size = 144M
apc.gc_ttl   = 3600
apc.ttl      = 7200

設定を終えたら、保存して閉じ、 Apache を再起動します。

/etc/init.d/httpd restart

2.3. インストールと設定の確認

APC がインストールされていること、およびその設定事項は、phpinfo() 関数を使って、確認することができます。

コマンドを使うなら、

php -R ' phpinfo(); exit(); ' | grep "apc"

で見ることができます。ブラウザで確認するには、テキストファイル・エディタで

<?php phpinfo(); ?>

と書いたファイルを作成し、“php_info.php”など、適当な名前を付けて、php 拡張子のあるファイルとしてどこかに保存します。次にそれをドメインのルートディレクトリにアップロードし、

http://domain.com/php_info.php

というような URL でアクセスします。スクロールすると、以下のような APC の項目を見つけることができます。

phpinfo()での APC の項目
図1 phpinfo()での APC の項目

この方法だと、インストールしたすべてのモジュールを一覧で見ることができるので、その点で便利です。このファイルを放置し続けることは、セキュリティ上好ましくないので、確認して不要になったら、削除しましょう。

2.4. メモリやキャッシュの管理

メモリやキャッシュの使用量を見たり、キャッシュを削除したりするには、apc.php にログインする必要があります。以下は、ソースコードからインストールした場合を前提に書きます。

まずは、このファイルをブラウザで閲覧可能なディレクトリにコピーします。

cp usr/local/src/APC-3.1.9/apc.php /var/www/html/root/apc.php

このファイルをエディタで開き、

defaults('ADMIN_USERNAME','apc');       // Admin Username
defaults('ADMIN_PASSWORD','password');    // Admin Password - CHANGE THIS TO ENABLE!!!

とあるところを見つけ、“password”を適当なパスワードで置き換えます。それからブラウザで、

http://www英数字.sakura.ne.jp/apc.php

にアクセスします。すると、次のようなメモリの使用状況を示すグラフを見ることができます。

APC.php のグラフ
図2 APC.php のグラフ(一部)

この画面の右肩にある“'apc' logged in!”をクリックし、“apc”というユーザ名と指定したパスワードで、ログインすると、ディレクトリごとのキャッシュ数を参照したり、キャッシュを削除したりすることができます。

3.Memcached

YouTube, Wikipedia, Facebook, Mixi などの有名サイトでも採用されている分散型メモリ・キャッシュ・システムで、データベースへの問い合わせ結果を一時的にキャッシュすることで、データベースへのアクセス回数を減らすことができるので、動的なウェブ・アプリケーションの高速化やスケーラビリティの向上のために利用されています。

3.1. yum によるインストールと設定

以下のモジュールをまだインストールしていない場合は、以下のコマンドで、インストールしてください。

yum --enablerepo=remi,epel,rpmforge install libevent libevent-devel memcached php-pecl-memcache php-pecl-memcached

設定ファイルを開きます。

vi /etc/sysconfig/memcached

必要に応じて、例えば以下のように修正します。

PORT="11211"
USER="memcached"
MAXCONN="4096"
CACHESIZE="2048"
OPTIONS="-d -l 127.0.0.1 -B binary"
  • PORT:受信する TCP ポート。こう指定しなくても、デフォルトの 11211 が利用されます。
  • USER:デーモンの実行ユーザを指定します。 “root” は不可なので、“memcached”としておきます。
  • MAXCONN:最大の接続数。デフォルトは1024で、1024 よりも大きな値にする場合はルート権限が必要です。
  • CACHESIZE:キャッシュ・メモリの最大サイズ。単位はビットで、上の例では、2GB が割り当てられています。
  • OPTIONS:その他のオプションを入力することができます。
    • d:デーモンとしてバック・グラウンドで実行させます。
    • l :受信する IP アドレス。グローバル IP アドレスだと、外部のサーバからアクセスできるので、セキュリティ上の理由から好ましくありません。127.0.0.1 とすることで、ローカルホストからのみ参照できるようにしましょう。
    • B:プロトコル・バインド。セキュリティ上の理由から、バイナリにした方が好ましい。

閉じて、保存します。

次に、Memcached を起動します。

service memcached start

“OK”と出たら、起動に成功しています。

次に、以下の一連のコマンドで、自動起動の設定を行います。

chkconfig --add memcached
chkconfig memcached on
chkconfig --list memcached

“0:off 1:off 2:on 3:on 4:on 5:on 6:off”と出れば、設定成功。

3.2. ソースコードによるインストールと設定

ソースコードによるインストールは、面倒ですが、最新版を確実にインストールすることができるというメリットがあります。インストールに先立って、以下のリンク先で、libevent, memcached, memcache の最新のバージョンを確認してください。

2011年11月現在、libevent-2.0.15, memcached-1.4.10, memcache-2.2.6 が最新版なので、以下この数字を使いますが、アップグレードされているときは、数字を変更してください。

ソースコードのディレクトリに移行します。

cd /usr/src

三つのモジュールをダウンロードし、解凍します。

wget --no-check-certificate https://github.com/downloads/libevent/libevent/libevent-2.0.15-stable.tar.gz
tar zxvf libevent-2.0.15-stable.tar.gz
wget http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
tar zxvf memcached-1.4.10.tar.gz
wget http://pecl.php.net/get/memcache-2.2.6.tgz
tar zxvf memcache-2.2.6.tgz

まずは、Libevent をインストールしましょう。以下のコマンドを、順次実行していってください。

 cd /usr/src/libevent-2.0.15-stable
 ./configure
 make
 make install

次に、Memcached 本体のインストールです。

cd /usr/src/memcached-1.4.10
./configure --build=x86_64-unknown-linux-gnu --enable-64bit --with-libevent=/usr/lib64/
make
make install

以下のコマンドで、正しくインストールされているかどうかを確かめましょう。

memcached -h

“memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory. ”というエラー・メッセージが出るときには、

ln -s /usr/local/lib/libevent-2.0.so.5 /lib64/

というようにして、32ビット用のフォルダから64ビット用のフォルダにシンボリック・リンクを張ります。

成功すると、様々な起動オプションのリストが出てくるので、そのうち必要なものを選んで設定をしましょう。以下は、その設定コマンドの例です。

memcached -d -u memcached -p 11211 -l 127.0.0.1 -m 2048 -c 4096 -B binary
  • d:デーモンとしてバック・グラウンドで実行させます。
  • u:デーモンの実行ユーザを指定します。 “root” は不可なので、“memcached”としておきます。
  • p:受信する TCP ポート。こう指定しなくても、デフォルトの 11211 が利用されます。
  • l :受信する IP アドレス。グローバル IP アドレスだと、外部のサーバからアクセスできるので、セキュリティ上の理由から好ましくありません。127.0.0.1 とすることで、ローカルホストからのみ参照できるようにしましょう。
  • m:キャッシュ・メモリの最大サイズ。単位はビットで、上の例では、2GB が割り当てられています。
  • c:最大の接続数。デフォルトは1024で、1024 よりも大きな値にする場合はルート権限が必要です。
  • B:プロトコル・バインド。セキュリティ上の理由から、バイナリにした方が好ましい。

次に、起動スクリプトを作成しましょう。以下のコマンドで、デーモン起動スクリプトにコピーします。

 cp /usr/src/memcached-1.4.10/scripts/memcached.sysv /etc/rc.d/init.d/memcached

ファイルを連結表示させます。

cat /etc/rc.d/init.d/memcached

Memcached を起動します。

service memcached start

“OK”と出たら、起動に成功しています。

次に、以下の一連のコマンドで、自動起動の設定を行います。

chkconfig --add memcached
chkconfig memcached on
chkconfig --list memcached

“0:off 1:off 2:on 3:on 4:on 5:on 6:off”と出れば、設定成功。

最後に、Memcache クライアントをインストールします。

cd /usr/src/memcache-2.2.6
phpize
./configure
make
make install

“Installing shared extensions: /usr/lib64/php/modules/”と出てきたならば、

ls /usr/lib64/php/modules/

で、“memcache.so”が“memcached.so”とともに入っていることを確認しましょう。

仕上げに、アパッチを再起動します。

service httpd restart

3.3. キャッシュの内容を確認する

memcached には、memcached-tool が付属しています。このツールでどのようなことができるか見てみましょう。

memcached-tool

このコマンドで、以下のようなリストが出てきます。

Usage: memcached-tool <host[:port]> [mode]
       memcached-tool 10.0.0.5:11211 display    # shows slabs
       memcached-tool 10.0.0.5:11211# same.  (default is display)
       memcached-tool 10.0.0.5:11211 stats      # shows general stats
       memcached-tool 10.0.0.5:11211 dump       # dumps keys and values
  • display:その時点での memcached 上に存在するキャッシュの一覧を表示します。
  • stats:様々な変数を表示します。
  • dump:キャッシュの中身を提示します。

一番重宝するのは、三番目のオプションです。

memcached-tool 10.0.0.5:11211 dump

というコマンドで、キャッシュの内容を確認することができます。

キャッシュをクリアするには、再起動をします。

service memcached restart

次に、MySQL の設定と、データベースの構築を行いましょう。

参考文献
[投稿者:永井俊哉]
ブログ内移動
カテゴリー内移動
お知らせ

このページでのコメントの受付は終了しました。本ページに関して、御意見、御質問、御批判をお持ちの方で、私に回答を求める方は、システム論フォーラムに投稿してください。

Sponsored Links
Books