COM+나 .Net Serviced Compoent를 호출하는 ASP.Net페이지가 느려지거나 갑작스럽게 종료하는 경우...

 

테스트도 무사히 마치고 성능상의 문제도 거의 없던 ASP.Net 응용프로그램이 느려지거나 갑작스럽게 종료하는 경우 다음 상황을 확인해 보세요.

 

1. In-Proc 타입 (구성요소 서비스에서 별도의 프로세스로 분리되지 않고 바로 서비스되는 흔히 라이브러리 타입이라고 불리는)의 COM+객체 또는 .Net Serviced Component를 호출한다

2. 수행 시간이 긴 작업을 수행하는 COM+ 또는 Serviced Component 호출 중 타임아웃이 발생한다.

3. 아래와 비슷한 형태의 오류가 이벤트 로그 상에 기록 된다.

COM+ Event ID: 4768
Event Type: Error
Event Source: COM+
Event Category: Unknown Event
ID: 4786
Description: The system has called a custom component and that component has failed and generated an exception. This indicates a problem with the custom component. Notify the developer of this component that a failure has occurred and provide them with the information below.
Method Name: IObjectControl::Deactivate()
Exception: E0434F4D
Address: 0x77E649D3
Call Stack:
kernel32!RaiseException + 0x48
mscorsvr!CoEEShutDownCOM + 0xe448
mscorsvr!CoEEShutDownCOM + 0xe3cb
mscorsvr!CoEEShutDownCOM + 0xe37f
mscorsvr!CoEEShutDownCOM + 0xe322
mscorsvr!GetMetaDataPublicInterfaceFromInternal + 0x26ef
mscorsvr!CoEEShutDownCOM + 0x15eae
mscorsvr!ReleaseFusionInterfaces + 0x1d2fa
comsvcs!RegisterComEvents + 0x3f074
comsvcs!RegisterComEvents + 0x40146
ole32!ReadStringStream + 0x22057
ole32!CreateDataAdviseHolder + 0x1534
ole32!CoQueryAuthenticationServices + 0xf5f
ole32!CoQueryAuthenticationServices + 0x1b06
ole32!CoQueryAuthenticationServices + 0x2236
Event Type: Error
Event Source: Application Error
Event Category: (100)
Event ID: 1000
Description: Faulting application w3wp.exe, version 6.0.3790.1830, faulting module kernel32.dll, version 5.2.3790.2756, fault address 0x00015e02. For more information, see Help and Support Center at https://go.microsoft.com/fwlink/events.asp.
Data: 0000: 41 70 70 6c 69 63 61 74 Applicat 0008: 69 6f 6e 20 46 61 69 6c ion Fail 0010: 75 72 65 20 20 77 33 77 ure w3w 0018: 70 2e 65 78 65 20 36 2e p.exe 6. 0020: 30 2e 33 37 39 30 2e 31 0.3790.1 0028: 38 33 30 20 69 6e 20 6b 830 in k 0030: 65 72 6e 65 6c 33 32 2e ernel32. 0038: 64 6c 6c 20 35 2e 32 2e dll 5.2. 0040: 33 37 39 30 2e 32 37 35 3790.275 0048: 36 20 61 74 20 6f 66 66 6 at off 0050: 73 65 74 20 30 30 30 31 set 0001 0058: 35 65 30 32 5e02

 

위의 상황이 발생하게 되면 컴퍼넌트 수행 중에 ThreadAbortException이 raise 되고 관련 내용인 윈도우즈 에러 리포팅 서비스에 기록 됩니다. 이때 문제가 일어나 프로세스는 작동이 멈추며 (FailFast가 발생하여) 이 상태에서 프로세스의 수행이 멈추게 됩니다.

 

이 문제를 해결할 수 있는 방법은 다음의 두가지 방법이 있습니다.

1. ASPX 페이지의 실행 시간을 늘린다. 즉 executionTimeout이나 Server.ScriptTimeout 의 값을 늘려 준다.

2. 문제가 발생하는 Component를 Out-Of-Process 형태로 별도 프로세스에서 실행 되도록 설정을 변경한다.

 

자세한 내용은 아래의 KB 문서를 참고 하시기 바랍니다.

 

An ASP.NET application may experience delays if a request times out when the application invokes in-process COM+ components

https://support.microsoft.com/?id=917069