web-dev-qa-db-ja.com

w3wp.exeが何をしているのかをどのようにして知ることができますか? (またはパフォーマンスの問題を診断する方法)

作成したサイトでパフォーマンスの問題が発生しており、診断を開始する方法が正確にわかりません。

簡単な説明は次のとおりです。私たちは非常に小さなサイト( http://hearablog.com )でトラフィックは非常に少なく、くだらない専用サーバーではCPUは常に非常に高く、時々100%のままです数分、そしてw3wp.exeはそれのほとんどを取っています。典型的なシナリオは、w3wp.exeが60%を占め、SQL Serverが約30%を占めることです。私たちのDBもかなり小さいです。

詳細な説明と詳細:

  • このサイトは、Cari.Netによって非常に不安定なサーバーでホストされています。最初から、サーバーが正しく動作していないように感じました。たとえば、時間がかかりすぎて、これは最初から設定の問題である可能性があります。それはかもしれませんまた、専用の仮想サーバーを持っているはずの仮想サーバーを取得しているかもしれませんが、これを示す証拠はありません、ただしサーバーが非常に遅くなる傾向があるという事実を除きます。

  • サーバーはSQL 2008 Expressを搭載したWindows 2008 Standard 64ビット

  • ハードウェアはCeleron 2.80 GHz、1 Gb RAMです

  • WebサイトはASP.Net MVCで開発されており、データアクセスにEntity Frameworkを使用しています。

  • さて、これはかなりひどいハードウェアですが、同等の(またはより悪い)ハードウェアを備えた他のサーバーをこれらの人と一緒に使用しており、パフォーマンスはこれよりはるかに優れています。とは言っても、他のサーバーにはW2003とSQL2005があり、私はASP.Net "WebForms" 2.0、MVC、LINQ、EFを使用していません。そのため、2008年に行くと他の要素がパフォーマンスの大幅な低下をもたらすかどうかはわかりません。

  • 私はMP3ファイル(5-20​​ Mb)を定期的に提供していますが、これは少し異常な負荷ですが、それが何らかの問題を引き起こしているのではないでしょうか?
    w3wpが大量のCPUを使用する原因になりますか?

  • ディスク使用量が非常に少ないようです。メモリは通常約90%ですが、ディスク使用量はページングが少ないことを示しているようです。

  • すべてのクエリはかなり単純ですが(または、そうである必要がありますが)、クエリが30秒以上かかる場合、SQLタイムアウトについて毎日トンの電子メールを受け取ります。しかし、EFはそれを台無しにしている可能性があります)。

これは、CPUが100%の「スプリント」の1つでリソースモニターがどのように見えるかを示しています。

alt text

そして、いくつかのパフォーマンスカウンターのスナップショット: alt text

今、私を非常に混乱させるのは、w3wpのCPU使用率が非常に高いことです。それほど多くのことをする必要はありません...だから私の質問は...

  • 「何をしているのか」を知る方法はありますか?多分それをプロファイルしますか?
  • 注目すべきパフォーマンスカウンターはありますか?
  • これは、このハードウェア/ソフトウェア構成で予想されることですか?
  • これは、なんらかの構成の失敗が原因である可能性がありますか?

どうもありがとうございました。
ダニエル・マグリオラ

42
Daniel Magliola

IIS Manager内でワーカープロセスUIを使用して、現在実行中のリクエストを検査し、もしあればスタックしている場所を確認できます。OpenIIS Manager ->ツリーでサーバーをクリックします。->ワーカープロセスをダブルクリックします。-> CPUを消費しているワーカープロセスをダブルクリックすると、現在実行中のリクエストがリアルタイムで表示され、どのモジュールが時間を取っているかを確認できます。

また、失敗した要求トレースを使用して、要求ごとに時間の一部を追跡し、長い時間がかかっている場所を確認することも検討してください。

42

さて、開始するには-サーバーは本当にくだらないです。しかし、それで十分です。

  • 仮想化については、ドライバーを確認してください。私はCPUを隠す仮想化プラットフォームがないことを知っています(そして私は誰かがceleronにhyper-vまたはesxを置くと確信します)が、ディスクなどのドライバーは兆候です。

  • CPUはそれほど高くないはずです。悲しいことに、このRAMを使用すれば、かなり乾杯します。プロファイラーを追加し始めると、持っているメモリがほとんどなくなります。

私は...するだろう:

  • この時点で実行されているものがないかログを確認してください。
  • OSを2008 R2にアップグレードします。そこでより多くの情報を入手できます。

テスト用:

  • 開発環境でサイトのコピーを作成し、いくつかのパフォーマンステストを実行します。
  • そこでプロファイリングを行います。
  • Failed Request Trackingを使用して、失敗したリクエストを見つけます。

http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis-7/

そこから始まります。これは、問題がさらに-hm-「分類可能」である場合にヒントを与える可能性があります。

また、より長期間のパフォーマンスログも保持します。 IO(秒/読み取り、秒/書き込みがほとんど唯一の関連するものです)に注意してください。残りはすべてIO賢明すぎますが、 IOに必要以上に時間がかかるようになると、ディスクが遅れます。

この時点では、少なくとも主要な指標として、構成の問題を除外します。何かがW3pリソースを使い果たしました。次に、それが何かを見つける必要があります。

一般に、これは私が物理的に使用したいサーバーではありません-とても小さいので、そこにマシンを置くのは私見には意味がありません。バーチャルの方がいいです;)

5
TomTom

Process Explorer というプログラムを使用して、w3wpプロセスで実行されている個々のスレッドを監視することができます。どのスレッドがすべての損傷を引き起こしているかを確認できるはずです。

4
Joe Phillips

MicrosoftのDebug Diagnostic Toolを使用してw3wpプロセスをダンプし、スレッドとスタックトレースをチェックして、ロックアップしているものがないか本当に幸運でした。 SUPER Niceである、スレッドを生成した要求されたページも表示されます。

http://www.Microsoft.com/en-us/download/details.aspx?id=26798

3
jocull

私はTomTomの将来に同意します。特にこの時点でVirtualからより良いマイレージを獲得することについて。ローカルでデバッグ/プロファイリングして問題を絞り込むことは、正しいことです。

Karnak The Magnificentの帽子とマントを着て、最初の封筒を要求します。ラムの反乱。 OS、ASP.NET、および貪欲なSQL Server Expressを1GBにすると、何が得られますか。

あなたの問題は、SQL Server Expressが利用可能なすべてのRAMをバッファプールに取り込み、それを解放するのに時間がかかることです。 http://support.Microsoft.comを参照してください。/kb/32136 詳細情報。また、IISには、256MBのデフォルトキャッシュがあり、微調整が必​​要になる場合があります( https://stackoverflow.com/questions/ 2853135/controlling-asp-net-output-cache-memory-usage )。 Debug Diagnostics は、これをトラブルシューティングするための優れたツールです(おそらく、ハンマー)。

http://technet.Microsoft.com/en-us/library/bb742546.aspx は、かなりまともな記事です。 http://social.technet.Microsoft.com/forums/en-US/sharepointadmin/thread/706c653a-16b0-4696-85ee-9ae3552a582e アプリプールのリサイクルが別の問題として狂っていることを示しています。

1
Larry Smithmier

Perfmonの「Process」カウンターを使用して、w3wp.exeプロセスの個々の属性を確認します。ワーカープロセスのCPU時間のうちカーネル時間はどれくらいですか?カーネル時間が長い場合はページングを示している可能性がありますが、確信が持てないということです。他の可能性はダフドライバーです。ワーカープロセスには23個のスレッドがアクティブになっていますが、これは良いことですが、何をしているのでしょうか。 SysInternalsのProcessExplorerを試して、もう少し掘り下げてください。また、どのTCP/IP接続が機能しているかを確認することもできます。私はSQL Expressを使用していませんが、兄貴のようにメモリー調整パラメーターがありますか。 SQLが不足していますIISメモリが不足しているため、過剰なページングが発生していますか?

1
Simon Catlin

完全に関連しているわけではありませんが、クエリでNOLOCKを使用しているかどうかを確認してください。 SQLタイムアウトの場合に役立つことがあります。

0
Rodrigo Hahn