1

我有一个运行 IIS 7.5 并提供 Web 应用程序的 Windows Server 2008 R2 服务器。

我注意到一个svchost.exe进程正在消耗大量 CPU(整个 cpu 核心为 100%)。该特定进程托管IIS Application Host Helper Service (AppHostSvc)。一旦问题开始,服务器在做什么就无关紧要了(否则它可能完全空闲,服务将占用 CPU)。

如果我终止进程,问题就会消失 - 在服务由 IIS 自动重新启动后,它使用最少的 CPU。

AppHostSvc 服务负责IIS 主机历史配置并自动备份配置(我相信默认每两分钟一次),我认为问题可能在 IIS 配置更改后开始。我尝试更改一些配置设置,但没有效果(即使等待几分钟)。

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

4

1 回答 1

0

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

在确保权限与默认设置匹配后,我icacls /T /reset在该目录(以及其他一些目录,inetsrv\config包括


更多细节

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表明它正在尝试扫描历史目录(duh)。我怀疑该目录中的某些权限被摆弄了,所以我尝试将它们重置为默认值。

于 2013-11-06T15:41:12.530 回答