さくらのVPS CentOSでサーバ構築 作業ノート13回目。
前回までで、ひととおりの初期目的は果たせたので、今回は高速化とメモリの効率化をしたいと思います。
PHPアクセラレータ
まずはPHP高速化の定番。PHPアクセラレータです。APC、eAccelerator, XCache 等ありますが、インストールが簡単で、そこそこ性能がいいAPCをインストールします。
APCは Remi リポジトリからインストールできます。リポジトリ導入は前々回の記事を参照してください。
[root@ ~]# yum list php-pecl-apc
php-pecl-apc.x86_64 3.1.4-2.el5.remi remi
[root@ ~]# yum install php-pecl-apc
下記のファイルを編集することで、バッファサイズ等を設定変更可能ですが、今回はデフォルトのままで様子を見ようと思います。
また、設定で apc.include_once_override を有効にしたら、WordPressの管理画面が真っ白になったりしたので、設定には注意してください。
vi /etc/php.d/apc.ini
インストールしたらhttpdを再起動します。
[root@ ~]# /etc/rc.d/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
テスト用のphpファイルがあるので、それをWebから見れる場所にコピーします。
[root@ ~]# cp /usr/share/doc/php-pecl-apc-3.1.4/apc.php /var/www/html/www.domain.com/
管理者情報を設定します。
[root@ ~]# vi /var/www/html/www.domain.com/apc.php
defaults('ADMIN_USERNAME','apc'); // ← ログインID
defaults('ADMIN_PASSWORD','password'); // ← 初期値の「password」以外にする必要があります。
これで、http://www.domain.com/apc.php にアクセスすれば、キャッシュ状況を確認できますので、定期的にチェックして設定を見直すといいでしょう。
ちなみに簡単なベンチ結果です。
[root@ ~]# ab -n 100 -c 10 http://www.domain.com
で計測したところ、
Requests per second: 9.44 [#/sec]
↓
Requests per second: 16.12 [#/sec]
となりました。しかも、心配していたメモリ使用量はほとんど変化無しでした。
おそらくアクセスが増えてキャッシュが多く貯まれば、メモリの使用量も増えると思います。
PHPの設定変更
デフォルトだとzlibが無効になっているので、有効にしましょう。
[root@ ~]# vi /etc/php.ini
zlib.output_compression = On
MySQLのキャッシュ有効化
もう一つ定番なMySQLのキャッシュとバッファの設定をしてみます。
[root@ ~]# vi /etc/my.cnf
query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=24M
query_cache_type=1
key_buffer = 16M
sort_buffer_size = 1M
read_buffer_size = 256K
MySQLを再起動します。
[root@ ~]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
Apacheの設定変更
512Mのメモリで稼動させる為にApacheの設定を見直してみましょう。
公式のマニュアル を参考にしました。
[root@ ~]# vi /etc/httpd/conf/httpd.conf
Timeout 45 #接続を切るまでの時間
KeepAlive On #接続の継続を許可
KeepAliveTimeout 3 #継続時間
<IfModule prefork.c>
StartServers 5 #起動時のプロセス数
MinSpareServers 5 #待機プロセス数の最小個数
MaxSpareServers 10 #待機プロセス数の最大個数
ServerLimit 64 #プロセス数の上限
MaxClients 64 #稼動プロセスの最大個数
MaxRequestsPerChild 4000 #一つのプロセスが実行するリクエスト数
</IfModule>
接続の保持時間を短縮して、同時接続数を減らしました。これは様子を見ながら調整しますが、アクセスが少ないので当面平気でしょう。
WordPressのプラグイン
WordPressのプラグインを入れる事でもパフォーマンスアップが可能です。
キャッシュ系で一番有名な WP-SuperCache は完全にHTML化してしまい、mod_rewriteで表示ファイルを差し替える方法で、キャッシュファイルがある場合は、PHPを一切使わないのでパフォーマンスもメモリ効果もいいと思います。
また、余計な転送を減らす Head Cleaner というプラグインは、HEAD内を少なくして、JavascriptやCSSを圧縮してまとめることで高速化させます。これだけでも、サイトによっては目に見えて違ってくるかと思います。
今日のハマりポイント
- yumからインストールした時の「apc.php」の場所は普通にソースから入れたのとは違い、「/usr/share/doc/php-pecl-apc-3.1.4/apc.php」にあった。
- APCインストール後のWordPressの管理画面が真っ白になったが、原因はapcの設定の「apc.include_once_override=1」だった。