質問

IIS6で実行されているASP.NET Webアプリは、定期的にCPUを最大100%撮影します。これらのエピソード中にほぼすべてのCPU使用を担当するのは、W3WPです。 CPUは、数分から1時間以上まで100%のままです。

これはステージングサーバー上にあり、サイトはこの時点でテスターから非常に軽いトラフィックを取得しています。

サーバーでアリのプロファイラーを実行していますが、それは啓発的ではありません。

これらのエピソードの原因となるものと、どのコードがCPUを忙しくしているのかをどこで見つけ始めることができますか?

役に立ちましたか?

解決

  1. 標準のWindowsパフォーマンスカウンター(多くのGETリクエスト、過剰なネットワークまたはディスクI/Oなど、他の相関アクティビティを探します)。コードとPerfmonから読み取ることができます(たとえば、CPUの使用がしきい値を超えた場合、データ収集をトリガーします)
  2. カスタムパフォーマンスカウンター(特にオフボックスリクエストや実行時間が不確かなその他の呼び出しの時間まで)
  3. Visual StudioチームテストやWCATなどのツールを使用して、ロードテスト
  4. IIS 7にテストまたはアップグレードできる場合、リクエストに1つの一定の時間がかかる場合、故障した要求トレースを構成するようにトレースを生成するように設定できます
  5. logparserを使用して、CPUスパイクの時点でどのリクエストが到着したかを確認します
  6. コードレビュー /ウォークスルー(特に、エラーが発生したかなど、適切に終了しないループを探し、静的の使用などのロックや潜在的なスレッド化の問題を探します)
  7. CPUとメモリプロファイリング(生産システムでは難しい場合があります)
  8. プロセスエクスプローラー
  9. Windowsリソースモニター
  10. 詳細なエラーロギング
  11. 実行時間の詳細を含むカスタムトレースロギング(おそらく、CPU使用パフォーマンスカウンターに基づいて条件付き)
  12. AppPoolがリサイクルするときにエラーは発生していますか?もしそうなら、それは手がかりかもしれません。

他のヒント

それはあまり答えではありませんが、古い学校に行き、IISプロセスの画像スナップショットをキャプチャしてデバッグする必要があるかもしれません。あなたもチェックアウトしたいかもしれません テス・フェランデスのブログ - 彼女はキックA ** Microsoft Escalation Engineerであり、彼女のブログはWindows ASP.NETのデバッグに焦点を当てていますが、ブログは一般的にWindowsデバッグに関連しています。 ASP.NETタグ(これがリンクしているもの)を選択すると、似ているいくつかのアイテムが表示されます。

CPUが100%に急増してそこにとどまっている場合、デッドロックシナリオまたは無限のループを持っている可能性が非常に高いです。プロファイラーは、無限のループを見つけるのに適した選択のようです。ただし、デッドロックを追跡するのははるかに困難です。

プロセスエクスプローラー トラブルシューティングに最適なツールです。あなたはそれを試してみることができます高いの問題を見つけることができます CPU 利用方法。アプリケーションの仕組みについての洞察を提供します。

あなたも試すことができます procdump プロセスをダンプし、CPUで実際に何が起こったのかを分析します。

また、Perfmonカウンターを見てください。彼らは、そのCPU時間の多くがどこに費やされているかをあなたに伝えることができます。使用する最も一般的なカウンターへのリンクは次のとおりです。

これは、大量のデータを出力に投棄している再帰クエリにありました - すべてを再確認して、終了し、無限のループが存在しませんか?

単一のページでそれを絞り込もうとするかもしれません - 私たちは同じケースでもあまり役に立たないアリを見つけました - 私たちがやったことはサイトを実行することでしたCPUを見るページをヒットすることでした - 次のページを監視するCPUをヒット - 非常に系統的そして時間がかかりますが、いくつかのコードトレースでそれを見つけることができない場合、あなたは運が悪いかもしれません -

IISログファイルを使用して、疑わしいページのセットに追跡することができました -

それが役立つことを願っています!

これはせいぜい推測ですが、おそらくあなたの開発チームは、リリースモードの代わりにデバッグモードでアプリケーションを構築し、展開しています。これにより、.pdbファイルが発生します。これの意味は、アプリケーションがシステムの状態とデバッグ情報を収集し、システムの実行中に情報をデバッグするための追加のリソースを取り、より多くのプロセッサの利用を引き起こすことです。

そのため、リリースモードで構築および展開していることを確認するのに十分なほど簡単です。

これは非常に古い投稿ですが、これもよくある問題です。提案された方法はすべて非常に優れていますが、常にプロセスを指し示しており、サイトが問題を抱えていることをすでに知っている可能性が多くありますが、特定のページが処理に時間がかかりすぎていることを知りたいだけです。私の意見で最も正確でシンプルなツールは、IIS自体です。

  1. IISの左ペインにあるサーバーをクリックするだけです。
  2. メインペインの「ワーカープロセス」をクリックします。どのアプリケーションプールがCPUを取りすぎているかをすでに確認しています。
  3. このプールでこの行をダブルクリックして(最終的には「All」を表示して「All」を表示する」のをクリックして更新します)。

ロードに時間がかかるページを識別する場合は、SharePoint'sを使用してください 開発者ダッシュボード どのコンポーネントに時間がかかるかを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top