Asp.Net 4.0 で実行されている Web サイトでパフォーマンスの問題を調査するには、アドバイスが必要です。
ウェブサイトの背景:
この Web サイトは、e コマース フレームワークに基づいて構築された Web ショップであり、多くのプロジェクトで安定性と信頼性が証明されています。Webshop はかなり長い間 (1 年) 安定して動作していましたが、顧客が ERP (MS Dynamics NAV) を新しいバージョンにアップグレードした後、パフォーマンスの問題がすぐに発生し始めました。
問題自体:
アプリケーション プールは正常に起動しますが、その結果、使用可能なメモリをほぼすべて消費します。したがって、明らかにこれはメモリリークの状況です。
より具体的な例: 昨夜、アプリケーション プールが再起動され、使用メモリは約 500 メガバイトでした。約 16 ~ 18 時間で、プールはすでに約 2 ギガバイトで実行されていました。ほぼすべてのメモリが消費され、アプリケーションが非常に遅くなるまで、プールはさらに拡大し続けます。
アプリケーション プールのメモリ スナップショットは、プールの再起動後と 2 ギグでもPerfViewで取得されました。
スナップショットの差分を以下に添付します。
ご覧のとおり、一番上の行はmscrolib!LocalDataStoreHolderです。それについての詳細を開こうとすると、次のような参照元ビューが表示されます
。そのため、何がメモリを消費しているのか、現時点ではわかりません。
参考になる場合は、RefTree のスクリーンショットを以下に示します。ここでは、強力なハンドルが 92.2% を占めていることがわかります。
質問は、より詳細にドリルダウンする方法について、ヒントやアイデアを提供できる人はいますか? メモリリークの原因を突き止める方法は?
前もって感謝します
編集:RedGate ANTSメモリプロファイルも試しました。これは、ここのさまざまなスレッドで多くのアドバイスを受けています。これは、いくつかのメモリ スナップショットを撮った後の概要図です。最新のスナップショットは 20 時間後に作成され、app-pool は約 3.7 Gb の RAM を消費しています。ご覧のとおり、左側の巨大な赤いチャンクは「管理対象外」で、サイズは 2.5 Gb です。ANTS が言うように、これは CLR 自体、グラフィック データ、または P/Invoke または COM+ を介してアクセスされる管理されていないデータによって使用されます。それでも、より詳細な情報を取得する方法はわかりません。