6

HAProxyの背後にある3台のサーバーでAsp.Net WebApiを実行しています。HAProxy は、これら 3 つのインスタンス間でリクエストを単純にランダムに分散します。

これらのインスタンスは、mongodb、redis、および一部の Windows サービスに接続します。

通常、w3wp.exe は各 API サーバーで約 30% の CPU を使用します。

ときどき (1 時間に数回) API サーバーの 1 つが大量の CPU を使用することを決定します。この動作と相関して、応答時間の増加が見られ始めます。HAProxy が 10000 ミリ秒の応答時間を確認し、要求を他の 2 つのサーバーにルーティングすることを決定するまで、数値は上昇し続けます。これらはすべて 10 ~ 20 秒で発生します。しばらくすると、このサーバーは通常の状態に戻り、リクエストの処理を再開します。数分後、別のサーバーがまったく同じことを行います。これは延々と続く。

New Relic を使用していますが、アプリケーションは WebApi アプリケーションであるため、有用な情報は得られません。すべてのサーバー (redis、mongo、および Windows サービス) の CPU 使用率、メモリ使用率、ネットワーク トラフィック、および I/O を監視していますが、前述の停止中に大きな負荷は見られません。

このアプリケーションの動作の背後にある原因をどのように検出できますか?

4

3 に答える 3

1

Process Explorer などを使用してミニダンプを取得し、それを WinDBG などで検査して、スレッドの動作などを確認することをお勧めします。ここでそれを行う方法についての良いブログ投稿があります:

http://www.haneycodes.net/but-it-didnt-happen-in-dev-or-qa/

于 2013-06-20T16:14:54.183 に答える
0

DavidH が言ったように、メモリ ダンプを取得することは非常に重要なステップです。必要に応じて、ダンプを読むお手伝いをします。

もう 1 つの便利な機能は、無料のCPUアナライザーです。

別のオプションは、PerfViewを使用することです。

さらに別のオプションは、JetBrains dotTrace を使用して w3wp.exe プロセスにアタッチすることです。

于 2013-06-20T21:36:26.930 に答える