【问题标题】:Why does AppHostSvc ocassionally get stuck using up 100% CPU?为什么 AppHostSvc 偶尔会在使用 100% CPU 时卡住?
【发布时间】:2013-11-06 15:41:12
【问题描述】:
我有一台运行 IIS 7.5 并为 Web 应用程序提供服务的 Windows Server 2008 R2 服务器。
我注意到svchost.exe 进程正在消耗大量 CPU(整个 cpu 内核为 100%)。该特定过程是托管IIS Application Host Helper Service (AppHostSvc)。一旦问题开始,服务器在做什么就无关紧要了(否则它可能完全空闲,服务将占用 CPU)。
如果我终止进程,问题就会消失 - 服务由 IIS 自动重新启动后,它使用的 CPU 最少。
AppHostSvc 服务负责IIS Host History Configuration 并自动备份配置(我相信默认每两分钟一次),我认为问题可能是在 IIS 配置更改后开始的。我尝试更改一些配置设置,但没有任何效果(即使等待几分钟后)。
最终我找到了触发它的原因,但这似乎是一个错误。请参阅下面我自己的答案。
【问题讨论】:
标签:
iis
iis-7.5
applicationhost
【解决方案1】:
原来触发器是 AppHostSvc 使用的历史目录的“坏”权限(默认情况下,它是 %windir%\system32\inetsrv\History)
确保权限与default settings 匹配后,我在该目录(以及其他一些目录,包括inetsrv\config)上运行icacls /T /reset,问题就消失了——AppHostSvc 停止了对CPU 的疯狂。
更多详情
当 AppHostSvc 卡在错误状态时,我转储了 svchost.exe 进程。其中一个线程具有以下调用堆栈:
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 表明它正在尝试扫描历史目录(duh)。我怀疑该目录中的某些权限被篡改了,所以我尝试将它们重置为默认值。