web-dev-qa-db-ja.com

IIS大量のメモリを使用するワーカープロセス?

サーバーに1つのWebサイトがあり、IISワーカープロセスは常に4GB RAMを使用しています。何を確認する必要がありますか?

c:\windows\system32\inetsrv\w3wp.exe
15
Jason

document Gulzarで言及されているCLRTuningセクションを確認します。

他の投稿者が指摘しているように、IDisposeを実装するオブジェクトは、終了時にDispose()を呼び出す必要があります。できれば、using構文を使用してください。

起動する perfmon.exeそしてこれらのカウンターを追加します:

  • Process\Private Bytes
  • .NET CLRメモリ#すべてのヒープのバイト数
  • プロセス\ワーキングセット
  • .NETCLRメモリ\ラージオブジェクトヒープサイズ

すべてのヒープカウンターのバイト数が同じままである間にプライベートバイトが増加する場合は、管理されていないメモリ消費を示しています。

両方のカウンターの増加は、管理されたメモリ消費を示します

14
Mitch Wheat

。NETアプリケーションのパフォーマンスの調整 のメモリボトルネックのトラブルシューティングに関するセクションを確認してください。

6
Gulzar Nazim

詳細は間違いなく役立ちます。アプリケーションプール内で実行されているアプリケーションの数はいくつですか?プールにASP.NETアプリケーションはありますか?

ASP.NETを実行している場合は、セッションに格納しているものとキャッシュ変数をよく見てください。 PerfMonを使用して、発生しているジェネレーション0、1、および2のコレクションの数を確認します。 UI要素をセッション状態またはキャッシュに保存することには注意してください。これにより、ページインスタンス全体と、ページインスタンスのすべての子も収集されなくなります。最後に、文字列の連結をたくさん行っているかどうかを確認します。 .NET文字列は不変であるため、これにより多くのオブジェクトのインスタンス化が発生する可能性があります。代わりにStringBuilderの使用を検討してください。

2
Maxam

W3wpプロセスのミニダンプを作成し、WinDbgを使用してメモリ内のオブジェクトを確認します。これは、MicrosoftのIISサポートチームがこのような質問を受け取ったときはいつでも行うことです。

2
jwanagel

ソースコードにアクセスできる場合は、IDisposableを実装するオブジェクトがusingステートメント内で参照されているか、使い終わったときに適切に破棄されているかを確認することをお勧めします。

UsingはC#構造ですが、基本的な考え方は、完了時にリソースを解放することです。

チェックするもう1つのことは、大きなオブジェクトが「処理中」のセッション状態またはキャッシュに入れられることです。

2
tvanfosson

他の人がこの問題の一般的な原因はリソースリークであると指摘しているように、win2k3サーバーとIIS6にも既知の問題があります KB916984

0
aku