0

私の質問の目的は今では完全に異なりますが、これは私の以前の質問から繰り返されています。

ときどき、週に 1 回、開発マシンでのみ、作成した Web アプリで System.AccessViolationException が発生します。

私のマシンにはうまく動作しないものがいくつかあるので (ブルー スクリーンがときどき表示されるなど)、以前は RAM の故障であると想定していました。memtestを24時間実行した後、そうではないと確信しています...

つまり、これは状況です: これは web アプリ、VB.Net 2.0、100% マネージ コードであり、COM、Interop、またはそのようなものを使用しません。Windows Server 2008 SP2 ボックスで実行されています。
私がやっている唯一の「奇妙な」ことは、アプリの起動時に独自の3つのスレッドを開始することです。これは、アプリドメイン内で「cronのような」ことを行います。また、このアプリが処理するリクエストのほとんどは非同期で処理されます。それらは、最大 30 秒間、応答なしで開いたままになります。(私はコメットロングポーリングを行っています)。

また、私はこのコードに約 1 年間取り組んできましたが、約 1 か月前にこれを開始したばかりです。最近変更したこの Web アプリ全体で変更した主要な、または重要なことは何も思いつきません。私は Javascript フロントエンドにほぼ完全に取り組んできました。


例外が発生すると、デバッグするかどうかを尋ねる典型的なポップアップが表示されます。すると、すべての ASP.Net スレッドと 3 つのスレッドが表示されます。
私の 3 つのスレッドは Sleep() を呼び出していますが、これは正常です。他のすべての ASP.Net スレッドには、コール スタックがまったくありません。
Visual Studio から例外が発生したことが通知されるスレッドでは、何も表示されません。

そのため、エラーがどこで発生するのか、あるいは毎回同じ場所で発生するのかどうかさえもわかりません。

手がかりとして見つけることができるのは、「アプリケーション」イベントログでこれだけです:

Faulting application w3wp.exe, version 7.0.6002.18005, time stamp 0x49e03238, 
faulting module unknown, version 0.0.0.0, time stamp 0x00000000, exception code 
0xc0000005, fault offset 0x0000000002358fe8, process id 0x1f4c, application 
start time 0x01ca41395c564ed9.

そしてその直後、これを伴う別のイベント:

An unhandled exception occurred and the process was terminated.

Application ID: DefaultDomain    
Process ID: 6632    
Exception: System.AccessViolationException

Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

StackTrace:    at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)

MgdIndicateCompletion をグーグルで検索しましたが、本当に役立つものは見つかりませんでした...

今考えてみると、約 1 か月前に変更されたことの 1 つは、開発マシンで Server 2003 x86 から Server 2008 x64 (したがって IIS6 から IIS7) に移動したことです。それが原因なのかもしれませんが、どうすればいいのかわかりません...

つまり、これは問題を私のコードベースから完全に排除するということですよね?


更新:ここで提案されているように、App Pool 統合を「クラシック」に変更すると修正されるようです。私はまだまともな解決策、または少なくとも説明を探しています。

4

3 に答える 3

0

ウイルス対策/ウイルスが関与しているかどうかを確認します。これらのプログラムは、すべてのプロセスに障害のあるフックをインストールする可能性があります。

于 2009-10-27T17:46:59.323 に答える
0

コードがわからないので、これがどれほど実用的かはわかりませんが、例外が発生しなくなるまで、大量のコードをコメントアウトできますか? 可能であれば、バイナリ検索アプローチを使用して、例外が発生した場所を見つけることができる場合があります。

于 2009-10-14T16:42:44.557 に答える