サーバー上に 1 つの Web サイトがあり、IIS ワーカー プロセスは一貫して 4 GB の RAM を使用しています。何を確認すればよいですか?
c:\windows\system32\inetsrv\w3wp.exe
サーバー上に 1 つの Web サイトがあり、IIS ワーカー プロセスは一貫して 4 GB の RAM を使用しています。何を確認すればよいですか?
c:\windows\system32\inetsrv\w3wp.exe
Gulzar が言及したドキュメントの CLR チューニング セクションを確認します。
他のポスターが指摘したように、実装するオブジェクトは、できればコンストラクトを使用して、終了時にそれを呼び出すIDispose
必要があります。Dispose()
using
perfmon.exe
これらのカウンターを起動して追加します。
- プロセス\プライベート バイト
- .NET CLR メモリ # すべてのヒープのバイト数
- プロセス\ワーキング セット
- .NET CLR メモリ\ラージ オブジェクト ヒープ サイズ
すべてのヒープ カウンターのバイト数が同じままでプライベート バイトが増加する場合は、管理されていないメモリの消費を示します。
両方のカウンターの増加は、マネージ メモリの消費を示します
.NET アプリケーション パフォーマンスのチューニングのメモリ ボトルネックのトラブルシューティングに関するセクションを確認してください。
w3wp プロセスのミニ ダンプを作成し、WinDbg を使用してメモリ内のオブジェクトを確認します。これは、Microsoft の IIS サポート チームがこのような質問を受けるたびに行っていることです。
ソース コードにアクセスできる場合は、IDisposable を実装するすべてのオブジェクトがusing
ステートメント内で参照されていること、または使用が終了したときに適切に破棄されていることを確認することをお勧めします。
Using
は C# の構造ですが、基本的な考え方は、作業が終わったらリソースを解放するというものです。
もう 1 つ確認する必要があるのは、大きなオブジェクトが「処理中」のセッション状態またはキャッシュに置かれることです。
詳細は間違いなく役立ちます。アプリケーション プール内で実行されているアプリケーションの数は? プールに ASP.NET アプリケーションはありますか?
ASP.NET を実行している場合は、セッションとキャッシュ変数に格納しているものをよく見てください。PerfMon を使用して、Generation 0、1、および 2 のコレクションがいくつ発生しているかを確認します。UI 要素をセッション状態またはキャッシュに保存することには注意してください。これにより、ページ インスタンス全体とページ インスタンスのすべての子も収集されなくなります。最後に、多くの文字列連結を行っているかどうかを確認します。.NET 文字列は不変であるため、これにより多くのオブジェクトのインスタンス化が発生する可能性があります。代わりに StringBuilder の使用を検討してください。
他の人が指摘したように、この問題の一般的な原因はリソース リークであり、win2k3 サーバーと IIS6 KB916984にも既知の問題があります。