私たちは、かなりの量の負荷に耐えなければならない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を使用して複数のサーバーに分散されます。ただし、前述のテストは単一のサーバーで実行されました。