2011-01-10 11 views
0

今日、私の仕事のプロダクションサーバーがこのOutOfMemoryExceptionを取得し始めましたが、知っている限り、Webサイトへのコード更新はありませんでした。Windows Server 2008 R2 + ASP.NET 3.5のSystem.OutOfMemoryException

私は以下のスタックトレースを貼り付けましたが、何が起こっているかについてのアイデアはありますか? 基本的に、このヘッダーコントロールは、リモートサーバーからWebサイトの一部をダウンロードし、HTMLの一部として含めます。

'/'アプリケーションでサーバーエラーが発生しました。 タイプ 'System.OutOfMemoryException'の例外がスローされました。 説明:現在のWeb要求の実行中に、未処理の例外が発生しました。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。

Exception Details: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown. 

Source Error: 

Line 58:   else 
Line 59:   { 
Line 60:    thisHeader = Cache[headerCacheKey].ToString() + "\n<!-- pulled from cache -->\n"; 
Line 61:   } 
Line 62:   if (!String.IsNullOrEmpty(thisHeader)) 


Source File: ... 

Stack Trace: 

[OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.] 
    System.String.Concat(String str0, String str1) +66 
    ASP.controls_header_ascx.Page_Load(Object sender, EventArgs e) in ...:60 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42 
    System.Web.UI.Control.OnLoad(EventArgs e) +132 
    System.Web.UI.Control.LoadRecursive() +66 
    System.Web.UI.Control.LoadRecursive() +191 
    System.Web.UI.Control.LoadRecursive() +191 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428 

答えて

4

ランタイムが(私は信じてLine 60)にあなたを指している行は、必ずしもSystem.OutOfMemoryExceptionの原因ではありません。 Webキャッシュに大量の情報を提供するコードが存在し、「有効」または「実際」ではなくなったときにその情報を解放するコードが存在する可能性があります。

とにかく私は、あなたが最初にこの二つの記事を読むことをお勧め:

  1. Troubleshooting System.OutOfMemoryException
  2. Tracking down managed memory leaks (windbg)

私は1日、同じ問題に直面したときに、第2の記事はALOT私を助けました。実際には今どこのソフトウェア(多くの場合、専売ソフトウェア)よりもwindbgが好きで、ソフトウェアのメモリリークがどこにあるかを知ることができます。

また、メモリリークの原因を見つけるためにこれらの非常に便利なツールのいずれかを使用して試みることができる:一般的に

  1. dotTrace Memory profiler
  2. ANTS Memory profiler

私はそれを検討することをお勧めだと思いますソフトウェア実行プロセスは、実稼働環境にソフトウェアを展開する前にメモリプロファイラを使用します。

3

Page_Loadでループしていて、そのループ内で文字列を連結していますか?文字列連結は非常に遅く、各連結で新しい文字列オブジェクトが割り当てられ、ヒープに置かれます。 System.Text.StringBuilderは、この種の操作を行うためにはるかに効率的な方法です。注:いくつかの短い文字列を連結するだけの場合は問題にはなりませんが、それ以上の場合はStringBuilderがあなたの友人です。

HTH

+0

他のコンポーネントが文字列連結を使用している可能性があります。例外をスローしているコンポーネントがこのOutOfMemoryExceptionを以前に持たなかったため、メモリリークが他の場所で発生していると感じました。 – Abe

+0

社内で作られたコントロールですか?それが支払われるものなら、それを生産した会社に連絡して、彼らがあなたを助けることができるかどうかを確かめます。 –

関連する問題