-1

大きな負荷がかかるサーバー アプリケーションのパフォーマンスのボトルネックを見つける必要があります。アプリケーションは、単一のサービス インスタンス (.asmx) と、時々 http 経由で要求されるいくつかのファイルで構成されます。この問題を解決するための私の計画は、1) サーバーが何らかの理由で失敗し始めたときに例外的な状況に陥ることです。2) その瞬間のパフォーマンス カウンターとログを分析して、その原因となった呼び出しの種類を推測します。

これを達成するために、両方のタイプのリクエストを発行する特別なクライアントを実装し、WebMethod/GET URL リクエスト中にエラーが発生することを期待して、それぞれのサイクルを無期限に繰り返すようにしました (NB - JMeter や WAPT などの標準の既存のソリューションサービスの使用シナリオが複雑なため、使用できません)。これまでのところ、私が観察しているのは、サービス呼び出しの応答時間の増加と、ファイルの読み込み中のネットワークタイムアウト例外です (このスレッドに従ってタイムアウトと見なされる OperationCanceledException をスローする HttpClient を使用)。ファイルのサイズは数 KB であり、サービス メソッドは要求ごとに 5 ~ 10 MB のデータを返すため、これは奇妙です。「より大きな」リクエストは、最初に失敗する可能性が高いと考えられていました。
Perfmon は、CPU 負荷の増加を示し、メモリのスパイクやリークはまったくありません。Request Execution Time カウンターはかなりランダムで無関係に見えます。Queue Length は常に 0
です。とはいえ、IIS は即席の DDoS を適切に処理し、同時にテスト アプローチを無効にしているようです (応答時間が長くなると、テスト クライアントのメモリ内のアクティブな要求が増えることを意味します)。これにより、ある時点でメモリオーバーフローが発生し、データを受け取った直後に何もせずにすでにデータをフラッシュしています)。
詳細 : サーバー マシンは 4x3Ghz コア、4 Gb RAM です。毎秒 50 ~ 100 リクエストの負荷を生成すると、帯域幅は 10 ~ 20 Mb/秒になります (テスト クライアントは、サーバーのデータセンター内の VM、4 Gbps NIC に配置されます)。30 分間のテスト セッションは、サーバーとクライアント間の 10 ~ 30 Gb の純粋なデータ転送です。
Web サービス/IIS を実際にダウンさせるにはどうすればよいですか?

4

1 に答える 1

1

まず、私は独自の負荷テスト ツールを作成しません。たくさんあります。JMeter(オープンソース)を使用しました。JMeter (およびその他の同様のツール) を使用して、POST パラメーターと GETパラメーター、Cookie、およびその他の HTTP ヘッダーの両方を送信できます。

次に、問題が実際にサーバーにあり、他のインフラストラクチャではないことを確認します。ネットワーク、ルーター、ファイアウォールなどはすべて最大の機能を備えており、問題の根本原因である可能性があります。それらのほとんどには、ログとレポートのツールがあります。たとえば、ファイアウォールの最大容量に達したときにスループットの問題が報告されたテストを見てきました。サーバーは限界点に近づいていませんでした。これは、通常は CDN から提供されるかなり大きなバイナリ ファイルをテスト ケースに含めたためです。

次に、全体として、静的な HTTP 要求の処理が問題になる可能性は低いです。IIS は、それが本当に得意です。あなたが言及した種類のハードウェアについては、毎秒何千ものリクエストを処理することを期待しています。静的ファイル用。

ほとんどの場合、問題の原因は動的ページ (.asmx) です。したがって、負荷テストではすべての静的ファイルを無視し、.asmx に注目します。あなたが言及した種類のハードウェアでは、asmxes が適切に機能している場合、おそらく 1 秒あたり何百ものリクエストを生成する必要があります。

Web サーバーが正しく調整されており、asmx スクリプトのパフォーマンスが適切であるという前提に基づいて作業すると、サーバーが限界点に達しなければならないため、テスト システムの (CPU とメモリの) 容量の少なくとも 2 倍が必要になると予想されます。 (これは、JMeter での私の経験に基づいています。JMeter は、私の Web アプリケーションほど効率的ではありませんが、複数のテスト クライアントを簡単にデプロイできます)。したがって、あなたの場合、サーバーの仕様に一致する 2 台のマシンを探します。

JMeter (および私が使用した他のほとんどすべての負荷テスト ツール) を使用すると、複数のマシンを負荷テスト クライアントとして簡単に使用できます。また、JMeter を使用したクラウドベースの負荷生成も使用しました。

この経験則が正しい理由は完全にはわかりませんが、複数のプロジェクトで観察してきました。

于 2013-08-30T15:12:56.030 に答える