2011-06-14 8 views
1

私たちはすべてのサーバーロジックを保持するAsp.NETアプリケーションを持っています。 このアプリケーションはサービス(ページなし)のみを受け入れます。予期せずAsp.netのメモリが肥大化する

しばらくしてから、w3wp.exeプロセスのメモリ消費量が膨らむ傾向があります。 最大サイズ(私のサーバーでは最大10ギガバイト)まで、数秒で成長します。

予期せず発生するので、私たちは実際には要求に応じて再作成することはできません。

この問題をデバッグするには、何か助けが必要です。 誰も私が使用できる良いツールを知っていますか?おそらく、メモリをダンプしたり、プロセスがメモリ消費量に達したときにスナップショットを取得したりすることができます。

ご協力いただければ幸いです。 ダニエル

答えて

2

​​。私はメモリプロファイラ(あなたがリークを見つけるのに役立つはずです)が有用かもしれない評価版を持っていると思います。

チェックするためにいくつかの単純なもの:

  1. ごIDisposableをオブジェクト(HttpWebRequestの、WCFオブジェクト、アンマネージリソースや危険なコードを使用するもの)を割り当て、それらを配置していませんか?

  2. 非常に大きなテーブル全体をRAMにロードしようとするクエリがありますか? (おそらく)SQL結果を操作しているLINQコードのメモリ使用状況を調べてください。

0

テスFerrandezのブログは、ASP.NETをデバッグするための素晴らしいリソースです:あなたが調べることができ、メモリダンプをキャプチャするために様々な方法があり

WinDbgとSOSオフラインで:

http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/17/how-to-capture-a-minidump-let-me-count-the-ways.aspx

1

開発環境でこれを行うことができれば、Visual Studioの組み込みプロファイリングツールを使用して問題を追跡できるはずです。これが唯一の本番環境で発生した場合

これをチェックアウト:https://rpm.newrelic.com

2

多くの良い答えは、デバッグにここにあります。

この問題にアプローチするもう1つの方法は、コードレビューを使用することです。

プログラムでメモリがリークする方法はたくさんあります。しかし、数秒で数GBのデータが漏れるのは、コード内のループが原因です。

ので:

  • は、あなたのコード内のすべてのループを識別し
  • 最初の各反復
  • をログに記録しますログの電話をかけていない場合、あなたはそれで
  • を見ることによって、問題を見ることができるかどうかを確認
  • 展開し、それが逃げループが
ある場所を確認するためにログをチェック
  • 起こる次の時間を待ちます
  • +0

    +1のコードレビュー – citronas

    関連する問題