J2EE アプリケーションのストレス テストに LoadRunner を使用しています。
1 つの MySQL DB サーバーと 1 つの JBoss App サーバーがあります。いずれも 16 コア (1.8GHz) / 8GB RAM ボックスです。
接続プール: DB サーバーは で使用max_connections = 100
していmy.cnf
ます。App Server もand でmin-pool-size
and max-pool-size
= 100を使用しmysql-ds.xml
てmysql-ro-ds.xml
います。
「通常の」シングルコア PC から 100 人の仮想ユーザーの負荷をシミュレートしています。これは 1.8GHz / 1GB RAM ボックスです。
アプリケーションは、100 Mbps のイーサネット LAN にデプロイされ、使用されています。
ストレス テスト スクリプトのセクションでランデブー ポイントを使用して、実際の並列 (同時ではない) 使用をシミュレートしています。
質問:
この負荷を生成する PC の CPU 使用率は 100% に達することはなく、メモリも利用可能であると思います。したがって、この PC にさらに仮想ユーザーを追加してみることができます。しかし、その前に、同時実行/並列処理とハードウェアに関する 1 つまたは 2 つの基本事項を知りたいと思います。
このロード ジェネレーターのようにシングル コアのロード ジェネレーターだけを使用して、実際に 100 ユーザーの並列ロードをシミュレートできますか (各ユーザーは実際に専用の PC から操作を使用しています)。私のおそらく間違った理解は、シングルコア PC 上の 100 個のスレッドが同時に (つまり、インターリーブされて) 実行されるが、並列には実行されないということです。 ) たった 1 台のシングルコア PC から! あれは正しいですか?
ユーザーの並列処理に対するネットワーク帯域幅の制限: 負荷を生成する 100 コアの PC (または、LAN 上に 100 台のシングルコア PC があるとしましょう) を持っていると仮定しても、イーサネットの動作では同時実行と同時実行のみが許可されるわけではありません。負荷を生成する PC をサーバーに接続するイーサネット ワイヤ上のユーザーの並列処理ではありません。実際、マルチコア ボックスのアプリ サーバーに到達するユーザー リクエストはインターリーブされてしか到達できないため、この問題 (ユーザーの並列処理の欠如) は、実際のアプリケーションの使用 (ユーザーごとに 1 台の PC) でも持続するようです。 . つまり、マルチコア サーバーがユーザー要求を並行して処理できるのは、各ユーザーがサーバーとサーバーの間に専用の物理層接続を持っている場合だけです。
(上記の「問題」により) 並列処理が達成できず、同時実行と呼ばれる次善の策のみが可能であると仮定すると、シミュレーションを使用するハードウェアとネットワークの仕様をどのように選択すればよいでしょうか。たとえば、(a) 負荷を生成する PC はどの程度強力であるべきか? (b) これらの PC ごとに作成する仮想ユーザーの数は? (c) LAN 上の各 PC は、スイッチの代わりにハブを使用する場合に発生するブロードキャスト トラフィックを (回避するために) スイッチを介してサーバーに接続する必要がありますか?
前もって感謝します、
/HS