Решение 100% зависания процессора svchost.exe, на котором размещается служба WCF на IIS 6.0? - PullRequest
0 голосов
/ 21 ноября 2011

У нас странная проблема с процессорами WCF, размещенными на IIS 6.0 в Windows Server 2003 SP2 x64. В некоторых наших средах, по-видимому, при запуске пула приложений svchost.exe, на котором запущен iissvcs, будет раскручивать до 100% процессорного времени и оставаться там неопределенно долго (наблюдается более 3 дней).

Титбиты расследования:

  • Похоже, что это не какой-то конкретный пул приложений (мы проводим 5+ WCF сервисы в каждом своем пуле приложений) и не происходят каждый раз.
  • Процесс w3wp.exe запущен, но почти не использует память / процессор - похоже на очень раннюю инициализацию.
  • Кажется странным, что на самом деле это svchost.exe, а не w3wp.exe, поэтому я подозреваю, что проблема в конфигурации. Кажется, никогда не трогать наш код.
  • У нас есть 3 среды, в которых есть проблема, и 1, в которой ее нет. К сожалению, среды устанавливаются вручную, поэтому они не полностью идентичны.
  • Среда, похоже, заражается только одной из наших двух ветвей. Но после первого просмотра проблемы, даже если развернута другая ветвь, проблема остается.
  • Процесс, похоже, не выполняет никаких операций ввода-вывода, ни диска, ни сети.
  • Антивирусное ПО отключено на одном из серверов.

Я потратил бесчисленное количество часов на поиск проблемы, но не смог найти связанных с этим проблем в 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 дает тот же результат.

Стеки следов всех потоков:

Я хотел включить сюда следы, но так как они довольно длинные, я пока что положил их на пастин.

Любое понимание того, что может быть причиной - или способов дальнейшего расследования - приветствуется.

1 Ответ

1 голос
/ 01 декабря 2011

Пара моментов:

Этот поток обнаружил исключение при попытке выделить память:

      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, так что было бы лучше установить машины на самый актуальный уровень.В противном случае следующим шагом будет проверка на повреждения кучи.

...