IIS 6.0 W3WP.EXE Worker Process 가 Crash 빈도가 높아졌습니다. 오류 급증 시 자동 보호 기능을 설정해 놨는데...
새벽에 연속해서 오류가 발생하여 서비스 중지되기라도 하면 ..... 어휴.....
월 39,900원에 모시는 보험이라도 가입하고 싶은 그 심정 공감합니다.
[환경]
IIS 6.0
[현상]
간헐적으로 IIS Worker Process 가 Crash 되며, “오류 급증 시 자동 보호 기능” 활성화로 인해 해당 풀 서비스가 중지되어 웹 서비스가 중지되었습니다.
[원인]
ABCUpload4 모듈에 이미 Free 된 잘못된 heap 주소 공간을 사용하여 메모리 할당(RtlAllocateHeap)을 호출하여 문제가 발생하였습니다. 이는 수집된 5개의 user dump 에서 모두 동일한 상태를 확인할 수 있습니다.
[해결방안]
ABCUpload4 모듈을 잘못 사용하지 않았는지 레퍼런스를 확인하거나 모듈 자체에 오류가 있는 것은 아닌지 해당 개발자 또는 vendor 에 문의하여 확인이 필요합니다.
[분석결과]
1. 이벤트 로그 확인
이벤트 형식: 경고
이벤트 원본: W3SVC
이벤트 범주: 없음
이벤트 ID: 1011
컴퓨터: LAIGOSERVER
설명:
응용 프로그램 풀 'AppPool #LAIGO'에 사용되는 프로세스에 World Wide Web 게시 서비스와의 심각한 통신 오류가 있습니다. 프로세스 ID는 '3322'입니다. 데이터 필드에 오류 번호가 있습니다.
이벤트 형식: 경고
이벤트 원본: W3SVC
이벤트 범주: 없음
이벤트 ID: 1009
사용자: N/A
컴퓨터: LAIGOSERVER
설명:
응용 프로그램 풀 'AppPool #LAIGO'에 사용되는 프로세스가 예기치 않게 종료되었습니다. 프로세스 ID는 '2384'입니다. 프로세스 종료 코드는 '0x80'입니다.
2. 데이터 수집
가. Debug Diagnostics Tool 1.1 를 사용하여 IIS Crash 설정으로 W3WP.EXE Process Crash 에 대한 덤프 수집 완료
3. W3WP.EXE(AppPool #LAIGO) 메모리 덤프 분석
0:004> r
eax=00000008 ebx=03900000 ecx=7c9696d6 edx=00000000 esi=00000080 edi=00000000
eip=7c969ffa esp=030c1170 ebp=030c138c iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
ntdll!RtlAllocateHeap+0x24:
7c969ffa 0b4310 or eax,dword ptr [ebx+10h] ds:0023:03900010=????????
0:004> !address 03900010
038f2000 : 038f2000 - 0001e000
Type 00000000
Protect 00000001 PAGE_NOACCESS
State 00010000 MEM_FREE
Usage RegionUsageFree
0:004> kb
ChildEBP RetAddr Args to Child
030c138c 038c8bd4 03900000 00000008 00000080 ntdll!RtlAllocateHeap+0x24
WARNING: Stack unwind information not available. Following frames may be wrong.
030c13d4 038c5ed6 00000001 00000080 19930520 ABCUpload4!DllGetClassObject+0x27107
030c1400 038c5801 030c1588 030fef2c 030c15a4 ABCUpload4!DllGetClassObject+0x24409
030c144c 038c564e 030c1588 030fef2c 030c15a4 ABCUpload4!DllGetClassObject+0x23d34
030c147c 038c21d0 030c1588 030fef2c 030c15a4 ABCUpload4!DllGetClassObject+0x23b81
030c14a4 7c968752 030c1588 030fda1c 030c15a4 ABCUpload4!DllGetClassObject+0x20703
030c14c8 7c968723 030c1588 030fda1c 030c15a4 ntdll!ExecuteHandler2+0x26
030c1570 7c96855e 030c1000 030c15a4 030c1588 ntdll!ExecuteHandler+0x24
030c1570 7c969ffa 030c1000 030c15a4 030c1588 ntdll!KiUserExceptionDispatcher+0xe
030c1a8c 038c8bd4 03900000 00000008 00000080 ntdll!RtlAllocateHeap+0x24
030c1ad4 038c5ed6 00000001 00000080 19930520 ABCUpload4!DllGetClassObject+0x27107
030c1b00 038c5801 030c1c88 030fef2c 030c1ca4 ABCUpload4!DllGetClassObject+0x24409
030c1b4c 038c564e 030c1c88 030fef2c 030c1ca4 ABCUpload4!DllGetClassObject+0x23d34
030c1b7c 038c21d0 030c1c88 030fef2c 030c1ca4 ABCUpload4!DllGetClassObject+0x23b81
030c1ba4 7c968752 030c1c88 030fda1c 030c1ca4 ABCUpload4!DllGetClassObject+0x20703
030c1bc8 7c968723 030c1c88 030fda1c 030c1ca4 ntdll!ExecuteHandler2+0x26
030c1c70 7c96855e 030c1000 030c1ca4 030c1c88 ntdll!ExecuteHandler+0x24
030c1c70 7c969ffa 030c1000 030c1ca4 030c1c88 ntdll!KiUserExceptionDispatcher+0xe
030c218c 038c8bd4 03900000 00000008 00000080 ntdll!RtlAllocateHeap+0x24
030c21d4 038c5ed6 00000001 00000080 19930520 ABCUpload4!DllGetClassObject+0x27107
0:004> lmvm abcupload4
start end module name
038a0000 038f2000 ABCUpload4 C (export symbols) ABCUpload4.dll
Loaded symbol image file: ABCUpload4.dll
Image path: C:\WINDOWS\system32\ABCUpload4.dll
Image name: ABCUpload4.dll
Timestamp: Wed Sep 12 20:31:25 2001 (3B9F478D)
CheckSum: 00000000
ImageSize: 00052000
File version: 4.1.0.2
Product version: 4.1.0.2
File flags: 0 (Mask 3F)
File OS: 4 Unknown Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: 憰Ɔ띘Ɔ瘏Ȥퟸÿ䯷̄ೠ
ProductName: ABCUpload
InternalName: ABCUpload
OriginalFilename: ABCUpload.DLL
ProductVersion: 4, 1, 0, 2
FileVersion: 4, 1, 0, 2
FileDescription: ABCUpload
LegalCopyright: Copyright WebSupergoo 2001
본 덤프 분석 결과는 마이크로소프트 기술지원 자료를 참조하여 재구성 하였습니다.
[참고자료]
IIS 상태 코드
http://support.microsoft.com/kb/318380
작성자 : Lai Go / 작성일자 : 2009.04.02