AllowOverride がパフォーマンスに与える影響[Apache]
2006-01-31
AllowOverride を All とかにするとパフォーマンスが悪くなるから、必要なところだけ enable にね。とかよく言われますが、どの程度影響があるんだろうか? と前々から気になってたので、実際に測定してみました。
ab(Apache Bench)を使って、10回試行、そのうち、最大と最小を削除し、8回で平均を取った値で比べてます。
$ ab2 -n 100 -c 10 http://127.0.0.1/~kunitake/index.html
1回の試行毎に 10秒、間を空けてあります。
実際の集計はこんな感じ(apache-bench.pl は単に ab を起動、出力の整形をしてる簡単なスクリプト)
$ ./apache-bentch.pl
Requests per second: 1389.64 [#/sec] (mean)
Requests per second: 1400.95 [#/sec] (mean)
Requests per second: 1390.26 [#/sec] (mean)
Requests per second: 1368.25 [#/sec] (mean)
Requests per second: 1362.36 [#/sec] (mean)
Requests per second: 1406.47 [#/sec] (mean)
Requests per second: 1375.48 [#/sec] (mean)
Requests per second: 1391.46 [#/sec] (mean)
Requests per second: 1373.49 [#/sec] (mean)
Requests per second: 1399.76 [#/sec] (mean)
MIN/MAX/AVG : 1362.36/1406.47/1386.16125
環境は
Server | Apache 1.3.34 |
Kernel | Linux-2.6.14 |
FileSystem | ReiserFS + LVM + dm-crypt |
データ領域はとりあえず mount option に noatime を与えてあります(これによる Disk I/O の低減がパフォーマンスに目に見える形で貢献するのか、あとでまた調べよう)
で、実際に測定したのが以下。
- ALL
"AllowOverride All" の設定で測定
- ALL + htaccess
"AllowOverride All" および各ディレクトリに ".htaccess" を設置。
- None
"AllowOverride None" の設定で測定
一応、秒間に何リクエストを捌いているかがY軸になりますが、コンテンツの大きさなど、さまざまな要件で簡単に増減すると思うので、数字としてはあまり気にしないでください。まぁそもそも CPU/Memory の値も書いてないし、肝心な apache の設定も書いてないので、傾向を見る程度で(^^;
で、どの程度のパフォーマンスダウンと言えるのかと思って、パーセントに直したのが以下のグラフ。
横軸にあるディクトリ階層とは
こんな感じ
そもそも AllowOverride None ではないと、なんでパフォーマンスが落ちるかというと、リクエストされたコンテンツが置いてあるディレクトリに .htaccess があるかどうかを調べ、なければ、さらに上位のディレクトリに .htaccess がないかを調べ......というように再帰的に探しにいくからという記述がされているサイトもあるようですが、あろうがなかろうが、一番上まで探しにいって、さらに、深い方が設定的には優先されます(もしかしたら、上から順に .htaccess を探しに行くのかも?まぁ正確なところはソースコードみないとわからないけど)
まぁともかく、いちいちこんなチェックをしてるから遅くなるわけです。このことは、グラフからもそれは読み取れて、ディレクトリが深くなればなるほど、パフォーマンスが落ちていることからもわかるかと思います(さらに .htaccess があれば、その読み込みおよび評価も行う分遅くなりますね)
まぁどんな場合にもこのグラフのように数十%のパフォーマンスダウンが起きるわけではないとは思いますが、参考までに。
ついでに SSI を有効にして、実際に html にコンテンツを組み込む場合も測定してみましたが、こっちは約半分ぐらいに捌けるリクエストの数が減りました。やっぱ、パフォーマンスへの影響は大きいなぁ。
追記:2009-09-09
どうやらAllowOverrideの使い方を知りたくて Google で検索してくる人も多いようなので、そういった方は、下記を参照ください。
AllowOverrideについて