4

注意:これは不気味なCMSについての不平はありません。カスタムCMSのひどいApache Benchの結果

だけでApacheのベンチをいじると私たちのカスタムCMSと恐ろしい結果は、より正確に私が得てしまった:

Requests per second: 0.37 [#/sec] (mean) 

私が得たプレーンなPHPファイルで別のテストを実行すると:

Requests per second: 4786.07 [#/sec] (mean) 

CMSの以前のバージョンを使用した別のテスト:

Requests per second: 6068.66 [#/sec] (mean) 

Th eのウェブサイトがうまく動作していても問題は検出されませんでした.Googleのウェブマスターツールは、サイトの80%以上が正常であると報告しています。

テストされました:

ab -t 30 -c 10 http://example.com/ 

たぶん、Apacheの問題のいくつかの種類? Bad .htaccess config、またはそれに類似していますか?

更新:

ただソケットに簡単なテストを実行し、結果は似ています。ページは非常にゆっくりと読み込まれます。もし私が別のウェブサイトでスクリプトを走らせれば、すべては問題ありません。

また、チャンク長の問題については、small hintがあります。 (?悪いApacheのヘッダ、または行末)

サイトはgzipされ、かつ冗長ロギングがオンになったとき、私は応答でこれらの行を参照してください。途中で、同じ場所では、必ず

LOG: Response code = 200 
LOG: header received: 
HTTP/1.1 200 OK 
Date: Tue, 04 Oct 2011 13:10:49 GMT 
Server: Apache 
Set-Cookie: PHPSESSID=ibnfoqir9fee2koirfl5mhm633; path=/ 
Expires: Sat, 26 Jul 1997 05:00:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate 
Pragma: no-cache 
Cache-Control: post-check=0, pre-check=0 
Vary: Accept-Encoding 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=UTF-8 

2ef6 

をHTMLソースの場合は<!DOCTYPE HTML>となります。

お願いします。

更新#2:

ただRex Swain's HTTP Viewerと私のHTTPヘッダをチェックし、これらの結果だ:

HTTP/1.1·200·OK(CR)(LF) 
Date:·Wed,·05·Oct·2011·08:33:51·GMT(CR)(LF) 
Server:·Apache(CR)(LF) 
Set-Cookie:·PHPSESSID=n88g3qcvv9p6irm1fo0qfse8m2;·path=/(CR)(LF) 
Expires:·Sat,·26·Jul·1997·05:00:00·GMT(CR)(LF) 
Cache-Control:·no-store,·no-cache,·must-revalidate(CR)(LF) 
Pragma:·no-cache(CR)(LF) 
Cache-Control:·post-check=0,·pre-check=0(CR)(LF) 
Vary:·Accept-Encoding(CR)(LF) 
Connection:·close(CR)(LF) 
Transfer-Encoding:·chunked(CR)(LF) 
Content-Type:·text/html;·charset=UTF-8(CR)(LF) 
(CR)(LF) 

あなたは何も異常に気づくのですか?

+0

サーバーとCMSのログを確認しましたか? – palacsint

+0

問題がクライアント側から来ているのか、サーバー側から来ているのかを最初に確認することができます。その後、問題を分離するために二分法で問題を分離します。 – hornetbzz

+0

@palacsintログは正常です。すべて正常です。 – fabrik

答えて

4

通常のWebブラウザ(コメントに記載されている)とうまく機能する場合、CMSはApache Benchmarkからの要求を別々に処理します。

迅速なチェックリスト:

  • 私の知る限り、Apacheのベンチマークは、ただのCookie処理せずに、簡単なリクエストを送信し、その有効なクッキー(Webブラウザから値をコピー)と-Cを設定してみてください。
  • Webブラウザが送信するCMSとまったく同じヘッダーを送信してください。有効なリクエストのダンプをnetcat、HttpFox、またはパケットスニッファーで保存し、欠落したヘッダーを-Hに設定します。
  • Apache Benchmarkでリクエストを送信している間に、サーバー上のCMSをプロファイルします。多分あなたはボトルネックを見つけました。 index.php(またはテスト済みのスクリプトのエントリポイント)の最初と最後の行にタイムスタンプを持つ2人の貧しい人のerror_logコールでは、PHPスクリプトの速度がわかり、Apache HTTP Serverとネットワークのオーバーヘッドを計算するのに役立ちます。
  • あなたが異なるマシンからのソケットテストとブラウザのテストを実行した場合、それは(Apacheの中HostnameLookupsをオフにする)DNSの問題である可能性があります。同じマシンから実行してみてください。
  • ab -k ...またはab -H "Connection: close" ...を試してみてください。

私は、セッションを初期化するときにCMSがコスト高の初期化を行い、それが最初の要求を処理するときに起こると思います。 Apache BenchmarkはCookieをCMSに戻さないので、リクエストごとに新しいセッションが作成され、遅い応答の原因になります。

第二の推測では、CMSは、Apacheのベンチマークトリガーいくつかの高価な/遅い処理によって異なり、着信HTTPヘッダおよびヘッダ送信された(またはそれらの欠如)を扱うということです。それはGoogleのウェブマスターツールの報告以来より適切に見える。


Apacheのベンチマークは、例えば、HTTP 1.0リクエストを送信します。

GET/HTTP/1.0 
Host: localhost:9100 
User-Agent: ApacheBench/2.3 
Accept: */* 

それはあなたのサーバーを約キープアライブの設定を任意のHTTPヘッダを送信しないように私には見えますが、それは、クライアントがキープ使用することを前提としていクライアントがHTTP 1.0を使用しているときに有効です。これは、RFC準拠の動作ではありません:RFC 2616, 19.6.2 Compatibility with HTTP/1.0 Persistent Connectionsから

一部のクライアントとサーバがHTTP/1.0
クライアントとサーバでの持続的な接続の一部
以前の実装と互換性があることを望むかもしれません。 HTTP/1.0の固定接続は、デフォルトの動作ではないため、
が明示的にネゴシエートされます。

デフォルトでは、Apache Benchmarkはキープアライブを使用しないため、応答がソケットの終了時に到着するのを待機します。 15秒のアイドル時間が経過すると、サーバーはそれを閉じます。 wgetでメインページをダウンロードするのに15秒かかります。 WgetはリクエストでHTTP 1.0も使用します。

abは、プレーンなPHPファイルで同じサーバーでうまく動作するので、CMSのPHPコードのバグだと思います。

ab -k -t 30 -c 10 http://example.com/ 

または明示的に無効に持続的な接続と

ab -H "Connection: close" -t 30 -c 10 http://example.com/ 

それはまだサーバー側の問題だとあなたの元abコマンドがあるとにかく、あなたはキープアライブ接続(-k)を使用して、それを回避することができます右。

このバグはおそらくHTTP 1.0クライアント(Apache Benchmark、wgetなど)にのみ影響し、通常のブラウザを使用しているクライアントは気付かないことに注意してください。

+0

どちらも試しましたが、残念ながら成功はありません。ちょうど少ないRPS(0.07 /秒) – fabrik

+0

ブラウザからの元の要求とApache Benchmarkのパラメータを表示します。たぶんタイプミスかもしれません。そして更新を確認してください。 – palacsint

+0

オリジナルのテストリクエストは 'ab-t 30 -c 10 http:// popnroll.hu /'あなたのアップデートを調査しているATMです。 – fabrik

関連する問題