nginxのキャッシュが動作するようになった。
nginxの設定をいじってようやく動作するようになった。設定については下記サイトを参考にした。設定についてはまだまだ分からないところがある。やっぱりどのディレクティブが今適用されているかとか、ディレクティブの適用順とかが難しい。
- nginxベースの高速なWordPress環境をお名前.comのVPSで構築 5ページ
- PHP, Wordpress, Drupal and NibbleBlog Configuration Examples
- Wordpress Caching (W3TC, WPSC) tests and examples with Nginx
- nginx入門
そんな状態での設定であるが、キャッシュの効果は絶大である。下のグラフを見てほしい。
グラフはこのブログのTOPページをabツールを使ってパフォーマンス計測し、gnuplotを使って描画したものである。abツールのコマンドラインは下記のとおりである。
H:\xampp\apache\bin>ab -k -c 10 -n 100 -v 1 -g h:(gnuplotデータファイル名) http://webserver/blog/ > h:\tmp\webperf\n_n_r.txt
青色の線がキャッシュした場合のパフォーマンスなのであるが、値が小さすぎてほとんど0あたりでちょろちょろしている感じである。おそらく何もしない場合と比べて200倍くらい速くなっている。キャッシュ部分のみに着目して描いたグラフは下である。だいたい200ms以下のレスポンスとなっている。
驚異的なスピードとなっている。やっぱりphpの処理結果をキャッシュしているが大きい。動的Webページ生成というのは重いんですな。。
GTMetrixの結果
GTMetrixで計測してみるとかなり改善されている。リクエストした後の待ち時間(Waiting)が100ms程度に抑えられている。
ちなみに改善前の結果が下の図である。リクエストした後の待ち時間(Waiting)が長い(2秒以上)ことがわかる。この時間はPHPによる動的Web生成に大部分が費やされるているのだろう。キャッシュで改善されたものの、まだPHPやWordpress自体のチューニングの余地があるかもしれない。秒単位の処理時間はいくらなんでも遅すぎるような気がする。
Nginx Cache Controllerの導入
さらにWordpressにはNginx Cache Controllerを導入して、投稿やコメントに合わせてキャッシュを削除するようにしてみた。
しばらくはこの状態で様子をみることにしよう。
APCのチューニング
nginxのエラーログを見ると下記のエントリを発見。
2013/08/14 06:16:56 [error] 32633#0: *536 FastCGI sent in stderr: "PHP message: PHP Warning: require_once(): Unable to allocate memory for pool. in /var/www/wo rdpress/wp-content/plugins/wp-dtree-30/wp-dtree.php on line 62" while reading re sponse header from upstream, client: unix:A , server: , request: "GET /blog/ 2010/04/roland-mc-8-factory-demo-program-bach-invention-1/ HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "www.sfpgmr.net"
何やらメモリ不足のようである。ググるとこのページに対応方法が書いてあった。APCのメモリは16MBに設定していたけれどもそれでは足りないようだ。24MBに増やしてapc.phpでチェックしたところとりあえず足りていそうである。