0

ASP.NET アプリケーションで、夜間のリサイクルによって w3wp がハングすることがあるという問題に遭遇しました。

これが起こることです:

リサイクルがトリガーされます。明らかに、これは実行中のすべてのスレッドで ThreadAbortException を強制します。ただし、新しい w3wp をトリガーするようには見えないか、実際に例外をスローするのは新しい w3wp です (まだ再現できていません)。

私のログでは、大量の ThreadAbortException が発生し、スレッド カウントが無制限に増え続けています。つまり、新しいリクエストが終了しない新しいスレッドを生成することを意味します。これが古い w3wp だった場合、新しいリクエストは新しく開始された w3wp にルーティングされます。

シャットダウン タイムアウトもラピッド フェール保護もトリガーされないようで、手動でリサイクルされるまでサイトを使用できません。ほとんどの場合、CPU も大量に消費し、サーバーもほとんど使用できなくなります。

おそらくそれとは何の関係もないモノレール MVC を使用していますが、RescueController システムを利用しています。エラー処理で意図せずに ThreadAbortException をキャッチした場合、無限ループが発生し、w3wp がひどくハングして IIS が回復できなくなる可能性はありますか?

4

2 に答える 2

1

リソースの制約により、IIS は新しいワーカー プロセスを正常に開始できません。空きメモリが不足している可能性があります。

IIS でプライベート メモリ制限を調整し、Web ガーデンとも呼ばれる最大ワーカー プロセスの数を減らし (1 より大きい値に設定することはめったにありません。1 より大きい値に設定すると、根本的な問題が解決する可能性があります)、使用可能な物理 RAM を増やします。サーバー上で Marshal.ReleaseComObject を適切に呼び出すか、そうでなければメモリの解放を妨げているものを整理します。ガベージ コレクション モードをサーバーからワークステーションに変更することを検討することもできます ( http://msdn.microsoft.com/en-us/library/ms229357.aspxを参照)。

于 2011-08-16T01:43:32.713 に答える
0

ThreadAbortException をキャッチし、継承のためにそれ自体を呼び出す Exception の再帰的な try catch ループがあったことが判明したため、無限再帰になりました。

ロギングといくつかのエラー処理が必要だったので、例外のキャッチがありました。実行中に ThreadAbortException がスローされ続けることを除いて、他のすべての側面ではおそらく問題ありません。

于 2011-11-22T10:26:54.423 に答える