12

MSDNによると、同時ガベージコレクション(<gcConcurrent enabled="true"/>デフォルトの動作であるため、指定されていない)を伴う高負荷で実行されている.NETアプリケーションがExecutionEngineExceptionをスローする可能性があることを示す「ヒント」があります。これに関する追加の背景を提供するMicrosoftKBの記事または他のソースを知っている人はいますか?

これは、NHibernate3.2ベースのWindowsサービスアプリケーションで直接経験しました。このアプリケーションは、最大で数時間の操作後に必ずクラッシュします。ISession.Flush()呼び出しの例外を追跡することができました。

同じ問題のように見えるものを報告するnhusersに関するスレッドがあります。並行GCを無効にするという彼の提案した回避策は、これまでのところうまくいきましたが<gcServer enable="true"/>、並行GCを暗黙的に無効にするサーバーモードGC()に切り替えることもうまくいきました。

これをバグとしてMSに提出する前に、ヒントに記載されている同時GCの不安定性に関する追加情報を誰かが持っているかどうかを調べたいと思います。

4

1 に答える 1

5

並行GCが有効になっている場合、GCはアプリケーションを一時停止せずに機能しようとするため、アプリケーションに大きな負荷がかかっているときにこれが発生すると思われます。GCがGCサイクルの圧縮フェーズ中にメモリを移動しようとし、メモリを移動できない、またはアプリケーションポインタを正しく更新できない状況が発生した場合、ランタイムがこれをスローする可能性があります。アプリケーションが潜在的に無効な状態になるため、例外が発生します。

@casperOneが彼のコメントで指摘したように、この例外は.NET 4.0で廃止としてマークされていますが、それは必ずしもGCが.NET3.5で例外をスローしたのと同じ状態に自分自身を戻すことができないことを意味するわけではありません。GCが同じ状態になった場合、ランタイムは例外をスローするのではなく、FailFastコマンドを発行して終了します。

于 2011-09-24T01:20:28.653 に答える