web-dev-qa-db-ja.com

Azure App ServiceのCPU使用率が100%になる原因を特定するにはどうすればよいですか?

Azure App Serviceプランには5つのアプリがあり、すべての異なるアプリが同じアプリのさまざまなクライアントに提供されています。これは、SQLデータベースを備えたASP.NET MVCアプリです。

今朝、目が覚めて応答が遅いサイトに目覚めたところ、503エラーが発生することがありました。 App ServiceプランのCPU /メモリメトリックを確認すると、CPUが100%に固定されていることがわかりました。

CPU at 100%

また、個々のサイトのCPU時間のグラフは、すべてが同時にオフになっていることを示していますが、他のサイトよりも悪いものもあります。

Individual Sites CPU usage

Advanced Application Restartを実行して問題を解決しようとしましたが、ブレードがロードされませんでした。これは、サーバーが応答できないサーバーから情報を取得しようとしたためと考えられます。

最後に、各サイトを1つずつ停止して、CPUをゼロに戻した後、サイトを再び起動してみましたが、問題は解決したようですが、いくつかのサイトが上昇を始めています。

私は数週間前に同様の問題を経験し、自分のアプリプランに対して大きくなりすぎていると想定していたため、S1からS2にアップグレードしましたが、今日まで問題ありませんでした。

このCPUに飢えた動作の原因が何であるかを理解する方法について、私は完全に途方に暮れています。誰かが私にこれを診断し始める方法の正しい方向を教えてもらえますか?

12
littlecharva

この問題が何度か発生し、そのたびに暴走GC(ガベージコレクション)が実行されることが判明しました。証明して診断するのは難しいですが、結局は工藤(scm)サイトを使用して、ツール=>サポート(アプリのサポートサイトに移動します)をクリックします。

ここから、ディレクトリ(複数ある場合)とサイトを選択し、[分析] => [メトリック]をクリックし、[診断]ボタンをクリックします([〜#〜]ノート[〜#〜]これはすでに変更されているため、これらステップはいつでも変更できます)。その後、Analyze => Dianoticsに戻ると、最終的にメモリダンプ=> "Analysis status"レポートが表示されます。これはmhtファイル(悪意のあるブラウザIEまたはEdge)で開くことができます)である必要があり、キー "gc"を検索します。

「GCFrame」などへの参照を持つ興味深いコールスタックフレームが見つかるか、「System.Threading.WaitHandle.WaitMultiple」への呼び出しが興味深いのは、これらの数が多すぎる場合、ガベージコレクションで問題が発生している可能性があるためです。 。

それを解決する方法...それは「IE 6がまだ使用されている世界にどのように住むのですか?」.

6
cdmdotnet

あなたの最善の策は、この特定のアプリにNew RelicまたはApplication Insightsをインストールすることです。 App Service-> Tools-> Performance Monitoringから簡単にインストールできます。これにより、サーバー側とクライアント側の両方で何が起こっているかが詳細に表示されます。

Application Monitoring

記事: Azure Webアプリのパフォーマンスを監視する

3
Bruno Faria