CakePHPを使ったサイトに対して調子に乗ってab(Apache Bench)をかけるとFailedしまくる。試しに10回程度にしても9回失敗とかざら。かと言ってブラウザ経由でアクセスしてもそんなにひどいような状態には思えない。なんじゃらほい。
っと思ってたのだけど、とある人から聞いたところによるとApaceh Benchはレスポンスのデータサイズ(HTTPヘッダのLength)を見て結果を判断しているような動作らしいとのこと。
なので、CakePHPのDebugモードを有効にしているとページ下部に出ているようなSQLログなんかのせいでLengthが変わる。結果、Apache Bench先生は正常にアクセスできていないと判断、Failedしまくる。
試しにデバッグ出力をオンにした状態でabをかけると100回中99回失敗するという目も当てられないページを、デバッグ出力をオフにすると全く失敗しなくなった。言われてみれば、そういう動作なのも納得できる。そして、本番が動いている環境に対してabをかけることはあまりしてなかったので気が付かなかったわけだ。そしてテスト環境に設置してあるCakePHPは、デバッグ出力は有効にしているから常に失敗しまくる。
なるほど