为什么AppHostSvc会因使用100%CPU而陷入困境?

时间:2013-11-06 15:41:13

标签: iis iis-7.5 applicationhost

我有一台运行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配置更改后问题就出现了。我试图更改一些配置设置,但没有任何效果(即使在等待几分钟后)。

最终我找到了什么触发它,但它似乎是一个错误。请参阅下面的答案。

1 个答案:

答案 0 :(得分:0)

原来,触发器是AppHostSvc使用的历史目录的“坏”权限(默认情况下,它是%windir%\system32\inetsrv\History

确保权限与default settings匹配后,我在该目录上运行icacls /T /reset(以及其他一些目录,包括inetsrv\config)并且问题消失了 - 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)。我怀疑在该目录中摆弄了一些权限,所以我尝试将它们重置为默认值。

相关问题