2009-09-29 2 views
0

내 질문의 목적이 완전히 다르지만 이것은 일종의 my previous question에서 반복됩니다..Net 2.0 : System.AccessViolationException 문제를 해결하는 데 도움이됩니다. 100 % 관리 코드

필자는 현재 개발 컴퓨터에서 만든 웹 응용 프로그램에서 System.AccessViolationException을 발견하고 있습니다.

내 컴퓨터가 블루 스크린과 같이 잘 작동하지 않는 몇 가지 작업을 수행하고 있기 때문에 RAM이 잘못되기 전에 가정했습니다. memtest를 실행 한 후 24 시간이 지나서야 확신 할 수 있습니다 ...

이것은 상황입니다. 이것은 응용 프로그램, VB.Net 2.0, 100 % 관리 코드, COM, Interop , 또는 그런 것. Windows Server 2008 SP2에서 실행됩니다.
내가하고있는 유일한 "이상한"일은 appdomain 내부의 "cron과 같은"작업을하는 응용 프로그램이 시작될 때 내 스레드 3 개를 시작하는 것입니다. 또한이 응용 프로그램이 처리하는 대부분의 요청은 비동기 적으로 처리됩니다. 그들 중 대다수는 30 초 동안 응답하지 않고 열리게됩니다. (나는 Comet long-polling을하고있다).

또한이 코드를 약 1 년 동안 사용해오고 있으며 약 한 달 전에 시작되었습니다. 최근에 변경된이 전체 웹 앱에서 변경된 주요 사항이나 중요 사항을 생각할 수 없습니다. 나는 거의 자바 스크립트 프론트 엔드에서 작업 해왔다.


예외가 발생하면 디버깅 여부를 묻는 일반 팝업이 표시됩니다. 내가 할 때, 나는 모든 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,하지만 정말 유용한 것을 찾을 수 없습니다 ...

약 한 달 전에 변경 한 한 가지, 이제는 생각해 보았습니다. Server 2003 x64에서 Server 2008 x64로 (그리고 IIS6에서 IIS7로) 옮겼습니다. 어쩌면 그 원인이 될 수 있지만 여전히, 나는 이것을 어떻게 만들지 모르겠다. ...

내 말은, 이것은 내 코드베이스에서 문제를 완전히 없애겠습니까?


UPDATE :으로 그것을 해결하기 위해 "클래식"보인다 수있는 응용 프로그램 풀의 통합을 돌려, here을 제안했다. 나는 아직도 괜찮은 해결책, 또는 적어도 설명을 찾고있다.

+0

당신은 버전 관리에 시간을 거슬러 가서 문제가 시작되기 전에에서 앱 버전을 얻을 수 있습니다, 서버 마이그레이션이 원인이라는 (가능성?) 가능성을 제거하려면 나타 납니까? – JeffH

+0

흠, 좋은 생각인데,이 코드는 내 컴퓨터에서 계속 작동해야하기 때문에 내 dev 머신 이니 .... –

답변

0

코드를 모르는 상태에서 이것이 얼마나 실용적인지 모르겠지만 예외가 더 이상 발생하지 않을 때까지 코드를 주석 처리 할 수 ​​있습니까? 가능한 경우 binary search 접근 방법을 사용하여 예외가 발생한 위치를 확인할 수 있습니다.

+0

이 문제는 며칠에 한 번 발생합니다. 그것은 절대적으로 재생 불가능합니다. 또한, 이것은이 프로젝트에서 일하는 dev 컴퓨터입니다. 따라서 많은 코드를 주석 처리하면 작동하지 않게되고, 작동하지 않게됩니다. -S –

0

바이러스 백신/바이러스가 작동하는지 확인하십시오. 이 프로그램은 모든 프로세스에 결함있는 후크를 설치할 수 있습니다.

+0

이 파일에는 바이러스 백신이 없습니다. 기계. 그리고 나는 분명히 내가 바이러스가 없다고 희망한다! –

+0

다른 컴퓨터에서 디버깅 할 때 추가 dll이로드되지 않았는지 확인하기 위해 프로세스 탐색기를 사용하십시오. –

0

"오류가있는 모듈을 알 수 없음"유형의 충돌과 유사한 문제가 있습니다. 필자의 경우에는 반대가 있으며 SBS 2008 머신에서 생산 중입니다. 문제가되는 Windows 버전이 의심 스럽지만 확신 할 수 없습니다. 나는 (내가 이벤트 로그에 쓸 수 있어요 그래서 서비스의) 로그인하여 좁혀했고 나는 그 가능성이

#If DEBUG 
    ... 
#End If 

블록 내에서, 해당 옵션의 제안.

또한 JeffH가 제안한대로 특정 코드 부분 만 실행할 수도 있고 DEBUG 테스트를 사용하여 프로덕션 환경에서 해당 코드 만 실행할 수도 있습니다.

로깅은 내 출발점이지만 충돌이 발생했을 때 일어난 일에 대한 단서를 제공합니다. 며칠에 한 번씩 만 발생한다면 로그 파일이 커지면 성능 문제를 피하기 위해 컴퓨터에 로그 파일을 다시 작성해야합니다.

행운을 빌어 요 ...

관련 문제