none
.net Framework4(VisualC#)のガーベージコレクションについて

    質問

  • お世話になっております。

    ある案件で
    ・WindowServer2003R2→2012R2
    ・IIS6.0→IIS8.0
    ・.net Framework2.0→4.0
    ・ASP 4.0
    ・メモリ:12GB
    ・言語:VisualC#

    にOS環境を置き換えたのですが
    その結果、IISのワーカープロセスが肥大化し
    リサイクルがかかってもうまくメモリが開放されなくなって
    しまいました。
    (リソースモニタ上でメモリの使用率が100%近くまで
     到達し、ワーカープロセスリサイクルがかかっても
     メモリが解放されません。)

    ソース上はfinalizeで抜けているので
    ガーベージコレクションさえうまくかかれば、
    メモリが自動で開放され廃棄されると
    考えております。

    OS環境を入れ替えるまではリサイクル時にガーベージコレクションが働き
    メモリが開放されていたようです。

    上記についてですが
    ・想定されるメモリ肥大化の原因
    ・イベントログ・IISマネージャなどの確認方法
    ・できればソースコードを変更せず
     ガーベージコレクションをかける設定方法。

    などご回答をいただければと存じます。
    どうぞよろしくお願いいたします。
    2014年9月4日 3:27

回答

  • 智弘八木 さん、ご返信ありがとうございます。

    フォーラムの利用法とヘルプをフォーラム カテゴリの"マイクロソフトからのお知らせ" に投稿していますのでご覧いただければと思います。(分かりにくい場所だと思います。すみません。)

    実際に確認できているのは「リソースモニタ上でメモリの使用率が100%近くまで
     到達」しているということで、これだけから「メモリ肥大化の原因」を導きだすのは難しいと思います。トラブルシューティングの最初として、イベントログを参照してエラーの情報の有無、内容を確認していただくとなにか関連の情報を集める手がかりがあるかも知れません。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    • 回答としてマーク 智弘八木 2014年9月10日 2:00
    2014年9月4日 8:52

すべての返信

  • ASP.NETでのワーカープロセスのリサイクルとはワーカープロセスを終了し新しいプロセスを立ち上げることを指します。その上で質問文にある「リサイクルがかかってもうまくメモリが開放されなく」とは何を指しているのでしょうか? プロセスが終了したにもかかわらず何らかのメモリが解放されていないということでしょうか? であればどこのメモリ量を計測されたのかをまず示してください。

    それとも質問者さんの書かれた「リサイクル」が何か別のものを指しているのでしたら、用語定義を明確にしてください。
    2014年9月4日 4:09
  • >その上で質問文にある「リサイクルがかかってもうまくメモリが開放されなく」とは何を指しているのでしょうか? 
    >プロセスが終了したにもかかわらず何らかのメモリが解放されていないということでしょうか? 
    ご回答していただいた通りです。

    >であればどこのメモリ量を計測されたのかをまず示してください。
    リソースモニタのメモリ量を計測いたしました。

    >それとも質問者さんの書かれた「リサイクル」が何か別のものを指しているのでしたら、
    >用語定義を明確にしてください。
    「リサイクル」というのはワーカープロセスリサイクルを意味します。

    2014年9月4日 5:03
  • 質問者さん>

    同じ質問が 3 つのスレッドで立ってます。マルチポストという言葉をご存知でしょうか? スレッドの乱立は止めていただけませんか?

    http://social.msdn.microsoft.com/Forums/ja-JP/04db445b-bb77-4229-9a3d-7f59d18812a7/net-framework4visualc?forum=netfxgeneralja

    http://social.msdn.microsoft.com/Forums/ja-JP/6a0a953e-be3d-4488-ac4d-5f22bf13ad59/net-framework4visualc?forum=winserver8

    2014年9月4日 5:06
  • フォーラム オペレーターの星 睦美です。

    智弘八木 さん、
    Memory が解放されないという事象から、OS のMemoryの管理方法もトラブルシューティングの視野に入れてTechNet フォーラムに投稿されているのではないかと思います。

    解決を急がれているところ申し訳ありませんが、複数のフォーラムや掲示板に投稿される場合にはいったんMSDN フォーラムに投稿の質問をクローズしていただくことをお願いしています。

    今回はこちらのスレッドに返信がありますので、TechNet フォーラムに投稿いただいた質問は私からクローズさせていただきますが、もしサーバーOSに関する情報が必要な展開になりましたらお手数ですが再度の投稿をお願いします。

    ※環境に関して、
    ・WindowServer2003R2→2012R2
    ・.net Framework2.0→4.0

    Windows Server 2012R2 では.Net Framework 4.0 を利用できないため、確認させていただきますね。

    また既存の更新プログラムで解決されている問題の場合もありますので、OS を含めて最新の状態で検証を行った結果をお知らせいただければと思います。

    (参考)
    MSDN ライブラリ - .NET Framework のバージョンおよび依存関係:


    フォーラム オペレーター 星 睦美 - MSDN Community Support





    • 編集済み 星 睦美 2014年9月4日 6:31 編集
    2014年9月4日 6:18
  • ありがとうございます。

    今回、使用方法と、カテゴリ分類が決めきれずご迷惑をおかけいたしました。

    2014年9月4日 8:19
  • 智弘八木 さん、ご返信ありがとうございます。

    フォーラムの利用法とヘルプをフォーラム カテゴリの"マイクロソフトからのお知らせ" に投稿していますのでご覧いただければと思います。(分かりにくい場所だと思います。すみません。)

    実際に確認できているのは「リソースモニタ上でメモリの使用率が100%近くまで
     到達」しているということで、これだけから「メモリ肥大化の原因」を導きだすのは難しいと思います。トラブルシューティングの最初として、イベントログを参照してエラーの情報の有無、内容を確認していただくとなにか関連の情報を集める手がかりがあるかも知れません。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    • 回答としてマーク 智弘八木 2014年9月10日 2:00
    2014年9月4日 8:52