メモリを活用したサーバの高速化(分析〜対処)
最近ヤマレコのサーバが遅くなっていたので、色々と調べてみました。
今回は高速化の対応として、メモリをうまく使うツールを導入することにしました。
サーバ性能監視ツールによる分析
まず、現状のサーバ性能を見るために、
http://munin.projects.linpro.no/:muninをインストールして、
グラフを眺めてみました。
CPU利用率を見ると、夜間のバッチ処理で少し負荷が上がりますが、
全体的に見て余裕があるので、おそらくI/O待ちで
性能ネックになっているのだろうと考えました。
PAE対応によるメモリ拡張
muninのメモリ利用量グラフを見て初めて気づいたのですが、
メモリを6GB積んでるはずなのに、3GBしか認識されていませんでした。
メモリを有効活用するために、KernelをPAE対応に変更しました。
方法はyumでインストールするだけなので、非常に簡単でした。
# yum install kernel-PAE
あとは、grubの設定を書き換えて、PAE対応のカーネルで起動するようにします。
# vi /etc/grub.conf
古いカーネルがデフォルト起動になっている(default=1)
ので、PAE対応のカーネルがデフォルトになるように修正(default=0)します。
default=0 timeout=5 splashimage=(hd0,2)/boot/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.23.17-88.fc7PAE) root (hd0,2) kernel /boot/vmlinuz-2.6.23.17-88.fc7PAE ro root=/dev/md2 rhgb quiet initrd /boot/initrd-2.6.23.17-88.fc7PAE.img title Fedora (2.6.23.17-88.fc7) root (hd0,2) kernel /boot/vmlinuz-2.6.23.17-88.fc7 ro root=/dev/md2 rhgb quiet initrd /boot/initrd-2.6.23.17-88.fc7.img
リブートすると、メモリが増えていることが分かります。
#cat /proc/meminfo MemTotal: 6099484 kB ...
まぁ、もともと余裕があったのですが、とりあえず6GBまで認識するようになりました。
phpのコードをメモリキャッシュする(APC)
メモリを有効活用する方法として、PHP の実行コードをキャッシュする手段を取ります。
# yum install http-devel # pecl install APC
php.iniを編集します。以下の行を追加しました。
extension=apc.so apc.shm_size=324 apc.user_entries_hint=320000
メモリが余ってるので、今回は300M程キャッシュに割り当てました。
あとはapacheを再起動するとOK!
/usr/share/pear/apc.php
をHTTPDのフォルダにコピーしてみると、利用状況が確認できます。
図:APCの利用状況
図:APCの利用状況(グラフ)
100MB強のキャッシュ利用なので、300MB程度で十分足りているようです。
このAPCの導入だけで、体感速度が何倍も速くなった気がします。
興味のある方は、比較評価をやってるサイトもあるので探してみてください。