2

私たちは、かなりの量の負荷に耐えなければならないWebアプリケーションを開発しています。HP(Proliant DL 380)サーバー(2つの3.6GHz Xeon CPU、16 GBのRAMなど)でテストを実行しています。私はApacheJMeterとpylotを使用して負荷テストを実行しています(これらは同様の結果を示しています)。

あるシナリオでは、可能な限り1つのスレッドを使用して、インデックスページにアクセスするように負荷テストプログラムを構成しました。インデックスページは約60KBで、約10個のajax呼び出し、多くのJavaScriptおよびjQueryコード、必要なCSSなどで構成されています。私が得た結果は、まあ、残念でした。

完全なindex.jspページ:

  • スループット(要求/秒):3.567
  • 応答時間(秒):0.278

だから私はすべてのajax呼び出しを削除し、チャートとCSS(JSではない)も削除しました

  • スループット(要求/秒):6.082
  • 応答時間(秒):0.161

まだ非常に低いです!そこで、同じサイズのすべてのデータを含むHTML形式の静的インデックスページを作成しました(サーバー側とクライアント側の計算は含まれていません)。

  • スループット(要求/秒):20.787
  • 応答時間(秒):0.046

うわー、それは画期的なことでした!ここで、JavaScriptコードのいくつかをindex.htmlページに追加しました

  • スループット(要求/秒):9.617
  • 応答時間(秒):0.103

さて、ボトルネックが見つかったと思います、Javaスクリプトコード。「サーバー」が処理できるreq/secの数を調べる必要があります。また、java Scriptはクライアント側で実行されるため、このテストに含めるべきではないと思います。では、負荷テストツールはJSコードを処理する必要がありますか?(彼らはこれをしているようです)

もう1つの重要な問題は、ハードウェア、コンテンツサイズ、および前述の構成によると、このスループットの量は妥当かどうかということです。もっと期待してはいけませんか?私の期待は500リクエスト/秒です!ハードウェアを追加する唯一の解決策はありますか?!

ところで、WebアプリはJava + Struts2 + JSP + Hibernate+MySQLを使用して構築されています。また、haproxyを使用して複数のサーバーに分散されます。ただし、前述のテストは単一のサーバーで実行されました。

4

3 に答える 3

2

あなたが探しているのがサーバーがコンテンツを提供できる速度の生の数値である場合、私はそう言います、java-scriptを無視し、ページのすべてのさまざまなビットを転送するのにかかる速度に焦点を当てます(HTML 、画像、スクリプトファイル、CSSなど)。

ただし、ユーザーエクスペリエンスをテストしようとしている場合は、JSもその一部であるため、それを考慮する必要があります。説明から、ユーザーエクスペリエンスについて心配するのではなく、サーバーにロードする必要があります。

上記の最初の文で説明されているように、ページの一部を直接呼び出すようにJMeterを設定することを検討することをお勧めします。

于 2012-11-11T12:22:09.217 に答える
1

JavaScript(CSS、画像)はページに直接埋め込まれていますか、それともスクリプトタグから読み込まれていますか?後者の場合、ブラウザはサーバーからファイルをダウンロードするように強制され、1秒あたりのページ数が即座に半分になります。これが別のサーバー(Googleなど)からjqueryをロードする必要がある理由の1つです。これにより、ユーザーに小さな影響が与えられます。ページの読み込み時間(追加のDNSクエリを1つ作成する必要があります)が、実際にはサーバーの負荷を軽減します

于 2012-11-11T12:27:25.223 に答える
1

もう1つの重要な問題は、ハードウェア、コンテンツサイズ、および前述の構成によると、このスループットの量は妥当かどうかということです。もっと期待してはいけませんか?私の期待は500リクエスト/秒です!ハードウェアを追加する唯一の解決策はありますか?!

ページがキャッシュ可能になるようにアプリケーションを作成してから、アプリケーションの前にhttpプロキシを配置することは、多くの場合、優れた戦略です。

于 2012-11-11T12:28:00.117 に答える