Asp.Net

 asp.netで作ったシステムが1年ぐらい運用し、急にOutOfMemoryException例外が発生しました。データ量は約50Mなのに、ローカルのテストで問題なかったですが、原因がわからない。 可能な原因は

  1. ソースコードにメモリの制御がまずい
  2. メモリのリカベジーを行っていない。

 IIS6では、最大800Mを利用可能です、超えると OutOfMemoryExceptionの例外が発生します。IISにリサイクルの設定が重要です、IISマネージャを起動して、「アプリケーション プール」をクリックして、一覧を表示させます。設定対象アプリケーションプールの上で右クリックし、「リサイクルの設定」をクリックすると、「アプリケーションプールのリサイクル設定の編集」ウィンドウが起動されます、この中で設定できます。  C# はマネージコードですが、ソースコード中では、メモリの開放を注意しなければならない。でもコーディング中の「注意」って、なかなか難しいですね、ちょっといい対策方法を紹介します。 Global.asaxのApplication_Errorイベント内で、この例外をキャッチします。

ソースコードサンプル:

//例外を取得する
Exception objExp = HttpContext.Current.Server.GetLastError();
//ループで内部例外を取得する
for(Exception TempException = objExp; TempException != null ; TempException = TempException.InnerException)
{
   //OutOfMemoryExceptionの場合
   if(TempException.GetType().ToString() == "System.OutOfMemoryException")
   {
       //HTTPリクエストのエラーをクリアする
       HttpContext.Current.ClearError();
       //メッセージを表示
       HttpContext.Current.Response.Write("システムがメンテナンス中...");

       break;
   }
}


フレッツ光が月額556円~【GMOとくとくBB】

コメント:

  • w3wp、aspnet_wpスレッド利用するメモリの量には制限がありますので、IIS サーバーでは、メモリのサイズを大きくするのは、あまり意味ない。できればCPUの数を多めにしたほうがいいと思います。 -- 2010-08-03 (火) 09:56:59
  • OutOfMemoryExcetpionが発生する時、GC.Collect()で開放したほうがいいと思います。 -- 2010-08-03 (火) 09:58:44


(画像の文字列を入力して下さい)

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:45:35 (1627d)

e[NȂECir Yahoo yV LINEf[^[Ōz500~`I
z[y[W ̃NWbgJ[h COiq@COsیI COze