0

200 ページを超える ASP.NET 4.0 Web アプリがあります。公開サイトとcmsがあります。このアプリを同じサーバー内のほぼ 30 のドメインにインストールしたので、これらの各ドメインにアプリがインストールされています。

サーバー メモリ (プライベート ワーキング セット) はゆっくりと増加しますが、増加します。サーバーには 8 GB の RAM がありますが、毎朝 AppPool をリサイクルしているにもかかわらず、ある日の enb で OutOfMemory メッセージが表示されることがあります。

メモリ リークがあるはずですが、それらのリークを特定する方法がわかりません。可能な限りすべての要素を処分しようとしました...

これについては助けが必要です。このようなサービスを提供している会社はありますか? アプリをチェックしてメモリ リークを修正するという意味です。

ありがとう。-

いくつかの調査の後、次のような行がたくさん見つかりました。

Label xLabel = (ラベル)FormView.FindControl("xLabel")

処分なし。それは巨大なリークを生み出す可能性があると思いませんか?良くないでしょう:

using (Label xLabel = (Label)FormView.FindControl("xLabel")) { アクション }

ありがとう

4

2 に答える 2

0

New Relic は次のようなサービスを提供しています: https://newrelic.com/無料の試用版があり、アプリケーションに関する優れた分析を提供します。

または、自分で実行するには、MSDN の次の記事を参照してください。

http://msdn.microsoft.com/en-us/library/ee658248.aspx


「免責事項 - 従業員ではなく顧客です。

于 2012-09-11T10:08:24.183 に答える
0

前日のリサイクルの後、毎日の終わりにメモリ不足になった場合、明らかに何か問題があります。適切なエディションがあれば、コードを調べたり、VS.NET メモリ プロファイラーを使用したりする方法を理解できるはずです。

また、 Antsなどの専門的なプロファイリング ツールを参照することもできます。これは、私が多くの場合に役立つ優れたツールです。

プロファイラーを実行できる環境がない場合は、(DebugDiag またはタスク マネージャーを使用して) メモリ ダンプを取得し、(windbg を使用して) メモリ内のオブジェクトを調べることができます。これにより、コードが正しくない可能性があります。WinDbg を実際に使用している人がいる場合、プロファイリング ツールを使用したり、コード ベースが巨大な場合にコードを掘り下げたりするよりも、(メモリの問題が原因で) より迅速なオプションになります。

ところで、あなたが入れたサンプル コード - そのような参照は、コンテナがクリーンアップされるときに GC によって自動的にクリーンアップされるはずです。ラベル自体を保持するコンテナー (ビュー) が適切に破棄されていない場合、問題になる可能性があります。通常、問題は、参照されていて適切にクリーンアップされていない他のオブジェクト (大きなオブジェクト) にあります。

于 2012-09-27T12:25:50.940 に答える