2013-11-06 3 views
1

У меня есть сервер Windows Server 2008 R2, работающий под управлением IIS 7.5 и обслуживающий веб-приложения.Почему AppHostSvc случайно застрял, используя 100% -ный процессор?

Я заметил, что процесс svchost.exe потребляет много CPU (всего ядра процессора на 100%). В этом конкретном процессе принимал IIS Application Host Helper Service (AppHostSvc). После того, как проблема начнется, не имеет значения, что делает сервер (он может быть полностью бездействующим в противном случае, и служба будет пытаться съесть CPU).

Если я убью процесс, проблема исчезнет - после того, как служба автоматически перезагрузится IIS, она использует минимальное количество CPU.

Служба AppHostSvc отвечает за IIS Host History Configuration и автоматически выполняет резервное копирование конфигурации (по-моему, каждые две минуты по умолчанию), я подумал, что проблема может возникнуть после изменения конфигурации IIS. Я попытался изменить некоторые параметры конфигурации, и это не повлияло (даже после нескольких минут ожидания).

В конце концов я нашел, что запускает его, но это похоже на ошибку. См. Мой собственный ответ ниже.

ответ

0

Оказывается, триггер был «плохим» разрешения на директории истории, используемой AppHostSvc (по умолчанию, это %windir%\system32\inetsrv\History)

Убедившись разрешения соответствовать default settings, я побежал icacls /T /reset на этой директории (и на несколько других, в том числе inetsrv\config), и проблема исчезла - AppHostSvc перестала сходить с ума от процессора.


Подробнее

Я взял дамп svchost.exe процесса, когда AppHostSvc застрял в плохом состоянии. Один из потоков имеет следующий стек вызовов:

ntdll.dll!NtClose() 
KERNELBASE.dll!FindClose() 
apphostsvc.dll!CONFIG_HISTORY_ENTITY::ScanHistoryDirectory(void) 
apphostsvc.dll!CONFIG_HISTORY_ENTITY::TrimHistory(void) 
apphostsvc.dll!CONFIG_HISTORY_ENTITY::SnapshotConfig(void) 
apphostsvc.dll!CONFIG_HISTORY::SnapshotConfigFilesWorkItem(void) 
apphostsvc.dll!CONFIG_HISTORY::ExecuteWorkItem(class MULTI_WORK_ITEM *) 
apphostsvc.dll!MultiWorkQueueWorkCallback(struct _TP_CALLBACK_INSTANCE *,void *) 
ntdll.dll!TppSimplepExecuteCallback() 
ntdll.dll!TppWorkerThread() 
kernel32.dll!BaseThreadInitThunk() 
ntdll.dll!RtlUserThreadStart() 

Имя функции ScanHistoryDirectory предполагает, что он пытается сканировать директорию истории (Дух). Я подозревал, что некоторые разрешения были искажены в этом каталоге, поэтому я попытался вернуть их обратно по умолчанию.

 Смежные вопросы

  • Нет связанных вопросов^_^