メモリ リークを見つけるために redgate メモリ プロファイラを使用しています。しかし、このソフトウェアはシステム クラスしか表示しません。問題を引き起こしているページを見つけたいのですが、助けてください
1 に答える
ASP.NET Web サイトをプロファイリングすると、多くのシステム クラスが表示されます。これは、IIS が舞台裏で多くのことを行っているためです。
ソース コードがあるクラスは、クラス リストで太字で強調表示されます。フィルタリングを使用して、ソース コードがあるクラスのみを表示することもできます。ソースがなくても、特定の名前空間のクラスを強調表示したい場合 (たとえば、この場合はシステムにないもの)、Group by namespaceを選択してそれを行うことができます。
ANTS は、メモリ スナップショットが作成された時点でメモリに保持されているオブジェクトを示しています。クラス リストに、メモリ内にクラスが存在しないことが示されている場合は、その時点でクラスが存在しないことが原因です。
情報を提供していないため、特定のケースで多くのガイダンスを提供することは困難ですが、一般的には次のとおりです。
あなたは本当にメモリの問題を抱えていますか?ANTS タイムラインのパフォーマンス カウンターを使用して、アプリケーションの使用中のメモリ使用量を確認します。上がらない場合は、問題がない可能性があります。
適切なタイミングでスナップショットを撮っていることを確認してください。これは、正しく行うのが最も難しいことの 1 つです。まず、サイトが適切に「ウォームアップ」されていることを確認する必要があります。サイトでの最初のページ ヒットの動作を見ると、接続をセットアップするための 1 回限りのオーバーヘッド、使用されていないキャッシュなどのために、通常のアプリケーションの動作は見られません。アップ、ベースライン スナップショットを取得します。次に、問題が発生する可能性があると予想される方法でアプリケーションを使用してから、別のスナップショットを取得します。ANTS は 2 つのスナップショット間のメモリ使用量を比較し、特にスナップショット間でどのクラスがより多くのメモリを使用しているかを示します。次に、アクションを繰り返し (同じ方法でサイトを使用してから、別のスナップショットを取得します)、同様の増加を探します。
増加が起こる理由を調べます。問題と思われるものを特定したら、インスタンス保持グラフを使用して、そのオブジェクトがメモリに保持される原因となっている参照の連鎖を理解します。
ASP.NET メモリ リークの診断に関する一般的な問題は、非常に少量のメモリ リークしか発生しないが、非常に頻繁に (ページの読み込みごとに) リークする場合です。サイトは開発環境では問題なく表示される場合がありますが、本番環境では負荷がかかると失敗します。有用な開始方法は、負荷生成ツールを使用することです (IIS6 に付属する無料の tinyget ツールのようなものから開始するか、より洗練された負荷テストを使用することができます)、それらの条件下でのアプリケーションのパフォーマンスをプロファイリングします。 . 本番環境でのプロファイリングは危険な手段であり、絶対的な最後の手段としてのみ実行する必要があります。