私たちのウェブサイトは .NET ですが、古い ASP と 32 ビットのライブラリも含まれています。しばらくの間(2年間)正常に動作していました。しかし、この 1 か月間、IIS7 サーバーで次のエラーが発生し、追跡して修正することができませんでした。
「障害のあるアプリケーション w3wp.exe、バージョン 7.0.6001.18000、タイム スタンプ 0x47919413、障害モジュール kernel32.dll、バージョン 6.0.6001.18215、タイム スタンプ 0x4995344f、例外コード 0xe053534f、障害オフセット 0x0002f328、プロセス ID 0x%9、アプリケーション開始時刻 0x% 10.」
エラーを再現できます。
.ASPX ページの 1 つが読み込みを開始し、コードとクエリを実行します (コードが壊れた場所を追跡するために、ページ全体に response.flush() があります)、突然停止し、IIS で上記のエラーが発生します。
ページの読み込みが停止し、response.flush() がないと、(web.config で構成されているように) error.aspx ページにリダイレクトされません。
エラーは常に発生するわけではありません。場合によっては、3 回連続して発生し、その後、error.aspx への適切なリダイレクトにより、15 分間ノンストップで正常に動作します。
そのときに表示されるエラーは、「BOF または EOF のいずれかが True であるか、現在のレコードが削除されました」という典型的なものです。
エラーが発生すると、ページがハングし、ブラウザーからの同じコンピューター上の他のすべてのセッションでも Web ページがハングします (ところで、テスト中は 1 つのワーカー プロセスのみを許可します)。他のコンピューターから、サイトは正常に読み込まれます。
アプリケーション プールをリサイクルし、w3wp.exe を強制終了し、IIS を再起動できます。何もしません。ページを再度正常にロードする唯一の方法は、セッション状態を処理する MS SQL を再起動することです。これがなぜなのかはわかりませんが、ユーザーのブラウザーのセッション Cookie が (上記のクラッシュにより) 適切に終了されなかったスレッドを指しており、IIS がさらにコードを処理するためにそのスレッドが終了するのを待っていると推測しました (? )。誰かがこれをよりよく説明できれば、それは本当に役に立ちます。スレッドを「終了」するために設定できるタイムアウトはありますか? これは MS SQL 関連の問題ですか?
プライベート メモリと仮想メモリの使用状況も調べました。これは、コードが最も効果的ではなく、メモリ リークが残っていると確信しているためです。ただし、プライベート メモリと仮想メモリの両方がまだ非常に少ない (それぞれ 100MB 未満) にもかかわらず、ページがクラッシュするのを見ました。
ここに示されているように、Debug Diag と WinDbg を使用しました。 .aspxですが、windbg を機能させることができません。これは、現時点で実行しようとしていることです。
誰かが私たちを助けてくれたり、本当に素晴らしい正しい方向に向けてくれたら、ありがとう。