【问题标题】: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)。我怀疑该目录中的某些权限被篡改了,所以我尝试将它们重置为默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 2015-05-29
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多