Почему AppHostSvc иногда зависает при загрузке 100% процессора?

У меня есть сервер Windows Server 2008 R2 с IIS 7.5 и службой веб-приложений.

Я заметил, что svchost.exe процесс потребляет много ресурсов процессора (все ядро ​​процессора было на 100%). Этот конкретный процесс был хостом вспомогательной службы узла приложений IIS (AppHostSvc). Как только проблема начинается, не имеет значения, что делает сервер (в противном случае он может полностью простаивать, и служба будет загружать процессор).

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам