我们在Windows Server 2003 SP2 x64上的IIS 6.0上托管的WCF服务遇到了一个奇怪的cpu问题。在我们的一些环境中,似乎当应用程序池启动时,运行iissvcs的svchost.exe将旋转到100%cpu并无限期地停留(观察3天以上)。
调查花絮:
我花了无数个小时搜索这个问题,我无法在SO / google上找到任何相关问题。
使用WinDbg调查转储表示活动线程堆栈跟踪是:
00000000 000afaa8 00000000
77d6e4a6 ntdll!NtReadFile + 0xa
00000000 000afab0 000007ff
7fefe89e kernel32!ReadFile + 0x1e0
00000000 000afb50 000007ff
7fefe7cd advapi32!ScGetPipeInput + 0x3e
00000000 000afbc0 000007ff
7fee4ec9 advapi32!ScDispatcherLoop + 0xa0
00000000 000afca0 00000001
00002b29 advapi32!StartServiceCtrlDispatcherW + 0x119
00000000 000aff10 00000001
000029be svchost!wmainCRTStartup + 0x18a
00000000 000aff50 00000000
77d596ac svchost!wmainCRTStartup + 0xe
00000000 000aff80 00000000
00000000 kernel32!BaseProcessStart + 0x29
但是,转储正常工作的svchost.exe会产生相同的结果。
所有线程的堆栈跟踪:
我想在这里加入痕迹,但由于它们很长,我暂时将它们放在pastebin上。
对于可能导致这种情况的原因 - 或进一步调查的方法 - 的任何见解都是最受欢迎的。
答案 0 :(得分:1)
有几点:
此线程在尝试分配内存时遇到异常:
10 Id: b8c.9bc Suspend: 0 Teb: 000007ff`fff9c000 Unfrozen
Child-SP RetAddr Call Site
00000000`01c1e020 00000000`77ee5a46 ntdll!RtlpUnwindPrologue+0x83
00000000`01c1e070 00000000`77ee6198 ntdll!RtlVirtualUnwind+0x4f3
00000000`01c1e0f0 00000000`77ee65d9 ntdll!RtlUnwindEx+0x155
00000000`01c1e770 00000000`77ee459d ntdll!_C_specific_handler+0xdd
00000000`01c1e800 00000000`77ee60a7 ntdll!RtlpExecuteHandlerForException+0xd
00000000`01c1e830 00000000`77ef31ed ntdll!RtlDispatchException+0x1b4
00000000`01c1eee0 00000000`77ef6409 ntdll!KiUserExceptionDispatch+0x2d
00000000`01c1f480 00000000`77ef636f ntdll!RtlpLowFragHeapAlloc+0x404
00000000`01c1f570 000007ff`7fefef84 ntdll!RtlAllocateHeap+0xc1
00000000`01c1f7c0 000007ff`6b0c9d32 advapi32!ReportEventW+0xb8
00000000`01c1f880 000007ff`6b0c9bb8 iisutil!EVENT_LOG::LogEventPrivate+0xe2
00000000`01c1f910 000007ff`6b05a58f iisutil!EVENT_LOG::LogEvent+0x148
00000000`01c1f9a0 000007ff`6b05c793 iisw3adm!CONFIG_MANAGER::CrossValidateDataObjects+0x30f
00000000`01c1fd80 000007ff`6b05c4d5 iisw3adm!CONFIG_MANAGER::FinishChangeProcessingOnConfigThread+0x1d3
00000000`01c1fe10 000007ff`6b06b780 iisw3adm!CONFIG_MANAGER::ProcessMetabaseChangeOnConfigThread+0x115
00000000`01c1fe90 000007ff`6b044f39 iisw3adm!MB_CHANGE_ITEM::ExecuteWorkItem+0x30
00000000`01c1fec0 000007ff`6b06ad7a iisw3adm!WORK_QUEUE::ProcessWorkItem+0xb9
00000000`01c1ff10 000007ff`6b05c179 iisw3adm!CHANGE_PROCESSOR::RunNotificationWorkQueue+0x9a
00000000`01c1ff50 00000000`77d6b71a iisw3adm!ChangeNotificationLauncher+0x9
00000000`01c1ff80 00000000`00000000 kernel32!BaseThreadStart+0x3a
线程堆栈13,16,17具有相同的问题。这看起来像堆损坏,但没有转储文件很难验证。在某处,应用程序的动态内存管理代码存在错误。
iiws3adm存在多个错误,因此最好将机器修补到最新级别。否则,下一步是检查堆损坏。