2007~2011/IIS2009. 12. 22. 13:13

InetInfo.exe 프로세스가 CPU 100% 를 유지하며 시스템 Hang 을 유발하고 있습니다. 문제가 발생하면 InetInfo.exe 프로세스도 강제 종료되지 않는 상황입니다. 한 서버에 50개가 넘는 웹/FTP 사이트가 운영 중에 있어 문제의 요인을 찾아내기란 쉽지가 않았습니다. 무엇이 문제일까요?


[환경]
Windows 2000 Server SP4 / IIS 5


[현상]
현상1 : InetInfo.exe 프로세스의 CPU 사용률이 25% - 50% - 75% - 100% 순으로 증가합니다.
현상2 : InetInfo.exe 프로세스의 CPU 사용률이 0~100% 까지 급증합니다 (증가하는 데 소요되는 시간은 약 2분 내외)

위의 문제가 재현된 이후에는 IIS 서비스 재시작 또는 프로세스 강제 종료가 적용되지 않습니다.(액세스 거부)
임시 조치하기 위해 재부팅이 필요한 상황입니다.


[원인]
IIS 5 홈 디렉터리를 다른 컴퓨터에 있는 공유 디렉터리(a share located on another computer)로 사용할 경우 4,294,967,296 bytes(4GB) 보다 큰 파일을 전송할 때 이러한 현상이 나타날 수 있습니다. 실제 20GB 이상의 대용량 파일을 FTP를 통해 다운로드(get) 때 나타난 현상입니다.


[WORKAROUND]
IIS 5에서는 '다른 컴퓨터에 있는 공유 디렉터리'(NAS도 이에 포함) 를 홈 디렉터리로 사용할 경우 4,294,967,296bytes(4GB) 보다 큰 파일을 전송하지 않아야 합니다. IIS 6 에서는 이러한 현상이 나타나지 않습니다. 어쩔 수 없지요 ^^;


[분석결과]
1. 성능 모니터 - CPU 사용 추이




2. FTP 웹 사이트의 홈 디렉터리를 NAS 영역으로 설정하여 사용하고 있음 (다른 컴퓨터에 있는 공유 디렉터리)



3. IIS Web Log 
get/put 기록을 확인하여 해당 파일 size 확인


4. RUNNING Thread 

!THREAD 8510e520  Cid 55c.cf0  Teb: 7ff88000  Win32Thread: 00000000 RUNNING
IRP List:
    84c00e28: (0006,0100) Flags: 00000000  Mdl: 00000000
Not impersonating
Owning Process 857feca0
Wait Start TickCount    32885764      Elapsed Ticks: 0
Context Switch Count    1625279              
UserTime                  0:00:43.0593
KernelTime                0:16:20.0953
Start Address KERNEL32!BaseThreadStartThunk (0x77e5b740)
Win32 Start Address ISATQ!AtqPoolThread (0x6d529470)
Stack Init bd9a7000 Current bd9a6640 Base bd9a7000 Limit bd9a4000 Call 0
Priority 8 BasePriority 8 PriorityDecrement 0 DecrementCount 16

ChildEBP RetAddr  Args to Child
bd9a66e8 bfabfb11 84781008 85a58950 00000000 rdbss!RxInitializeContext+0x8a
bd9a6708 bfabcaca 84781008 85a58950 00000000 rdbss!RxCreateRxContext+0x53
bd9a67e0 bface3c9 bfac4570 8510e503 8478109c rdbss!RxFsdCommonDispatch+0x2b7
bd9a6810 bfa6c646 85a58950 84781008 85a58950 rdbss!RxFsdDispatch+0x93
bd9a6830 8041eecb 85a58950 84781001 854e0920 mrxsmb!MRxSmbFsdDispatch+0x118
bd9a6844 be8bbfd1 84ec1e88 00000000 854e09d8 nt!IopfCallDriver+0x35
bd9a6860 be8b7e51 854e0920 84781008 00000000 AhnFlt2K+0x4fd1
bd9a6878 8041eecb 854e0920 84781008 854da7a8 AhnFlt2K+0xe51
bd9a688c bf0cd0ae 84f48848 8510e520 800655c0 nt!IopfCallDriver+0x35
bd9a68a8 bf0d4061 84f48701 8043105b 84f48848 afd!AfdDoNonCachedTransmitIo+0x18e
bd9a68b0 8043105b 84f48848 bd9a68ec bd9a68e0 afd!AfdTransmitApcKernelRoutine+0x13
bd9a68f0 8006543c 00000000 00000000 bd9a6908 nt!KiDeliverApc+0xeb
bd9a68f0 8006511c 00000000 00000000 bd9a6908 hal!HalpApcInterrupt+0xb0
bd9a6978 bfabccc6 84ec1e88 85a58950 8042ec00 hal!HalRequestSoftwareInterrupt+0x3c
bd9a6a44 bface3c9 bfac4570 8510e503 8478109c rdbss!RxFsdCommonDispatch+0x4b3
bd9a6a74 bfa6c646 85a58950 84781008 85a58950 rdbss!RxFsdDispatch+0x93
bd9a6a94 8041eecb 85a58950 84781001 854e0920 mrxsmb!MRxSmbFsdDispatch+0x118
bd9a6aa8 be8bc12a 84ec1e88 00000000 854e09d8 nt!IopfCallDriver+0x35
bd9a6ac4 be8b7e51 854e0920 84781008 00000000 AhnFlt2K+0x512a
bd9a6adc 8041eecb 854e0920 84781008 851bb308 AhnFlt2K+0xe51
bd9a6af0 bf0cd0ae 84c00e28 84c00e60 84f487e8 nt!IopfCallDriver+0x35
bd9a6b0c bf0bec8b 84f48700 0000007c 84c00e28 afd!AfdDoNonCachedTransmitIo+0x18e
bd9a6bec bf0c412d 84c00e28 84c00f04 8599c350 afd!AfdTransmitFile+0x571
bd9a6c00 8041eecb 8599c350 84c00e28 84c00e28 afd!AfdDispatchDeviceControl+0xdd
bd9a6c14 804b32d0 84c00f04 00000000 84c00e28 nt!IopfCallDriver+0x35
bd9a6c28 804b4124 8599c350 84c00e28 85108108 nt!IopSynchronousServiceTail+0x60
bd9a6d00 804abd50 00003268 00000000 00000000 nt!IopXxxControlFile+0x5d6
bd9a6d34 80468389 00003268 00000000 00000000 nt!NtDeviceIoControlFile+0x28
bd9a6d34 77f88403 00003268 00000000 00000000 nt!KiSystemService+0xc9
028bfa40 74f4c3af 00003268 00000000 00000000 ntdll!ZwDeviceIoControlFile+0xb
028bfad0 6d521bee 00003268 000032f0 00000000 msafd!TransmitFile+0xb8
028bfb00 6fb2649a 01be0900 000032f0 00000000 ISATQ!AtqTransmitFile+0x9c
028bfb44 6fb2eaf1 013e1190 028bfbb0 00000000 ftpsvc2!ASYNC_IO_CONNECTION::TransmitFileTs+0x14e
028bfbbc 6fb28395 028bfc75 028bfc2c 01df3188 ftpsvc2!USER_DATA::SendFileToUser+0xe3
028bfc30 6fb321b8 01df3008 028bfc75 028bfc82 ftpsvc2!MainRETR+0xbb
028bfc54 6fb2d529 01df3008 028bfc70 01df3160 ftpsvc2!ParseCommand+0x240
028bfe8c 6fb2cf7c 00000012 00000000 01df3008 ftpsvc2!USER_DATA::ParseAndProcessRequest+0x27a
028bfea8 6fb2ecc3 00000012 00000000 01df3160 ftpsvc2!USER_DATA::ProcessAsyncIoCompletion+0x2b2
028bff28 6fb26658 01df3008 00000012 00000000 ftpsvc2!ProcessUserAsyncIoCompletion+0x64
028bff4c 6d521a22 01df3160 00000012 00000000 ftpsvc2!ProcessAtqCompletion+0x81



[참고자료]
FTP get command cannot transfer a large file, and 100 percent CPU usage occurs on a Windows 2000-based FTP server
http://support.microsoft.com/default.aspx?scid=kb;EN-US;888515


작성자 : Lai Go / 작성일자 : 2009.12.21

Posted by Lai Go