5

VSを使用した負荷テストは初めてですが、すべて正常に設定されていると思います。負荷テストの実行がすぐに100%のCPU使用率に急上昇するという問題があります。これは私のテスト結果に影響を与える可能性があり、予想される動作ではないと思います。

私のハードウェアプラットフォームは強力な開発者マシンです。数か月前にクアッドコア、12 GB RAM、2台のIDEドライブ、高速NICを搭載しています。必要に応じて詳しく説明することもできますが、通常は悲鳴を上げると思います。

VS2010 SP1、C#/。NET 4を使用して、MSSQL2008に対してWin7x64でローカルに実行されるMVC2/3アプリケーションをテストしています。

基礎となるテストは、Unityおよびその他のEnt-Libライブラリを使用して、ユーザーの権限に従ってデータベースからクライアントのコレクションをプルバックする単一のMVCコントローラーメソッドを実行する単体テストです。ユニットテストの通常の実行時間は0.4〜0.6秒です。

負荷テストは、パフォーマンスの問題を明らかにするように設定されており、10分間実行されます。

  • 初期ユーザー数:1
  • ステップ期間:3​​0
  • ステップユーザー数:1

観察:

  1. シングルユーザーとしての最初の30秒間は、実行が少し不安定になります。最初のテストには3秒かかりますが、これは通常のウォームアップです。次の15秒ほどは約0.4秒かかります。これは完璧です。ただし、10秒後、テストは5秒間実行を開始します。これは、2番目の仮想ユーザーが登場する前です。追加の仮想ユーザーが登場すると、テスト時間は徐々に増加します。これは予想されることですが、ランタイムはまだ長いように見えます。

  2. さらに懸念されるのは、CPU使用率がユーザー6付近で急上昇することです(8コアすべてで平均して約20%前)。ユーザー6と7では、CPUは70%になり、ユーザー8によって8コアに100%で固定され、10分後にテストが終了するまでそこに留まります。言うまでもなく、通常の段階的テストでは、10人の同時ユーザーから始めて100人以上に増やしたいのですが、CPUが100%で始まり、結果は確かに不正確です。

実行中のタスクからわかるように、赤銅鉱は明らかにQTAGENT.EXEです。それは私が見ることができるものからすべての予備のCPUサイクルを使用します。この負荷テストも32ビットモードで実行しましたが、QTAGENT32.EXEも同様に実行されます。

どうしてこの問題が発生するのか、ましてやどうしたらいいのか、途方に暮れています。任意の提案や解決策をいただければ幸いです。TIA!

編集

問題の回避策は、[テストの実行]ではなく[デバッグテスト]をクリックして負荷テストを開始することです。これは私にはまったく意味がありません。実際、私が期待するものとは正反対のようです。ただし、数百人のユーザーで一貫してテストを実行し、CPUをセミスラッシングしているだけであることを否定することはできません(スパイクで平均約50%)。

4

3 に答える 3

5

QTAgent は、すべての負荷テスト作業を行うコードです。テストを実行する各仮想ユーザーをループします。

テスト エージェントの CPU が固定される理由の 1 つは、Web サイトが非常に高速に結果を返していることです。これをシミュレートする良い方法は、静的な html ページの負荷テストを行うか、IIS によって十分にキャッシュされているページを要求することです。

テストの 1 秒あたりのリクエスト数を確認します。この値は、QTAgent が実行する必要がある作業の妥当な尺度です。

テストごとに、QTAgent は html リクエストを処理して送信し、受信したテストを記録し、結果をすべてのパフォーマンス監視統計とともに保存する必要があります。

次のステップとして、各単体テストの間に 1 秒の遅延を追加することをお勧めします。これにより、さらに数人の仮想ユーザーをロードできるようになります。

とはいえ、同じマシンでホストされている Web アプリで負荷テストを実行しても、CPU がペグアウトする前に非常に多くの仮想ユーザーを処理することはできません。

1 秒あたりのリクエスト数の統計を投稿できますか?

于 2011-10-19T20:40:27.490 に答える
1

したがって、それはユーザーエラーに帰着しました。私がテストしていたコントローラーは、非常に多くのリソースを消費するものでした。これについては、他の場所で CPU 使用率が高くなる最も可能性の高い原因として読んだことがありますが、この特定のコントローラーを使用している 8 人の同時ユーザーが私の CPU をペグできない可能性があると思いました (おっと)。いいえ、実際、私たちのコードは実行に非常にコストがかかり、8 人のユーザーが同時にページをリクエストすると、限界に達します。すべての提案をありがとう。

于 2011-10-27T15:11:10.123 に答える
0

多分ここで何かが役立つかもしれません: https://serverfault.com/questions/16005/what-affects-sql-connect-speed

その他のアイデア:

  • SQL Server はローカル ボックスにありますか? 同じボックスでテストを実行すると、SQL Server と QTAgent が処理時間で競合するため、問題が発生する可能性があります。各テスト スレッドは 1 つのデータベース スレッドと一致し、単体テストがデータベースを非同期的に呼び出していない限り、データベースが応答するまでビジー待機状態になります。8 ユーザーの場合、それは 8 つの単体テスト スレッドと 8 つのデータベース スレッドです...おそらく 16 のスレッドが全速力で動作すると、CPU をバタンと閉めるのに十分です。

  • 各反復の後にテストは接続を閉じますか、それとも接続を開いたままにしていますか? それを判断するには、Perfmon で SQL Server の接続数を確認します。

  • SQL Server Express ですか? たぶん、他のバージョンほど堅牢ではありません。

于 2011-10-19T19:38:46.533 に答える