PHPにAPC入れて処理が速くなった様子を数字で把握する

APC(Alternative PHP Cache)でPHPを高速化できるという話が最近ちょっと話題になっていた。 もう何年(4,5年?)も前に筆者がAPCを試したときはなんだかよくわからんエラーが頻発して安定性に不安を感じた覚えがあるのだが、最近のバージョンは安定しているようだ。

上記の記事に限らないんだが、高速化と題している割には結果としてはサーバ負荷の低減にだけ言及されている紹介が多く見受けられる(間違ってるわけじゃないけど)。そこで、ロードアベレージとかCPU使用率といった指標だけでなく、先日の記事のようにApacheのリクエスト処理時間も観測できるようにしておくと、本当に高速化していることを実感できる。

以下は筆者が管理するちょっとした実験サイトのapacheのアクセスログをanalogで解析した結果の所要時間レポートの比較。 (一部はしょってます)

所要時間(秒)APC導入前のある1日の全リクエスト中の割合APC導入後のある1日の全リクエスト中の割合
0 0.32% 0.06%
<= 0.01 0.01% 10.09%
0.01-0.02 6.23% 18.52%
0.02-0.05 34.83% 24.04%
0.05-0.1 27.05% 22.66%
0.1 -0.2 17.49% 12.61%
0.2 -0.5 6.45% 5.67%
0.5 -1 4.17% 3.38%
1- 2 1.72% 1.30%
2- 5 1.50% 1.40%

円グラフにでもすれば一目瞭然だろうが、数字を見るだけでも 全体的に処理速度が速くなっていることがわかる。 1秒以上かかる処理の割合にあまり変化が無いのは、PHPでの処理以外のところ(DB検索とか)でどうしても時間がかかってしまっているケースではAPCの効果は薄まる、という当然の結果。

この測定ではAPCの設定はすべてデフォルトのままで実施した。 apc.statもオンのまま。マニュアルにもあるとおりこれをオフにするともっと速くなるかなと思って試したのだが、トラブったのでやめた。というのは、例えば下記のようにスクリプトがあるとすると、

  1. /dir_a/foo.php
  2. /dir_b/foo.php
apc.statがオフの場合、 先にdir_a/foo.phpを他のスクリプトがinclude("foo.php")のように相対パス指定でincludeすると、dir_b/foot.phpを読むつもりで別のスクリプトがinclude("foo.php")をコールしたときにdir_a配下のほうのキャッシュを読んでしまうらしき挙動を示したのだ。これもやはりマニュアルに書いてあるとおりで、仕様である。相対パス指定であっても絶対パスで識別してキャッシュしてくれてもいいようなもんだが。include("/dir_a/foo.php")のように絶対パス指定するように全部書き直す?えー。

だから、apc.statはデフォルト(オン)のままにしておきましょう。それでも十分に速いし。

それから、5秒が2秒になったって言うんならともかく0.2秒が0.1秒に短縮されてそんなにうれしいか?と思うかもしれないけど実はバカにできないんだよ、という話が下記のとおり。

Chromeはなぜ速いのか - @IT (2008/12)

「この結論に驚くかもしれない――、ユーザーが0.5秒の遅れに気付くかって?しかし、Amazon.comでもわれわれは同様の経験をしている。100ミリ秒単位でページ表示を遅らせるA/Bテスト(条件を変えて2つのサービスを同時に公開するテスト)で、非常に小さな遅延ですら、収入に大きく響いてくるということを発見した。速いというのは本当に大切なことだ。マリッサが言うように“ユーザーはスピードに敏感に反応する”のだ」

トラックバックURL

このエントリーのトラックバックURL:
http://www.ywcafe.net/mt/mt-tb.cgi/941

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)


画像の中に見える文字を入力してください。