1

IIS 7.5 を実行し、Web アプリケーションを提供する Windows Server 2008 R2 サーバーがあります。

プロセスが大量の CPU を消費していることに気付きましたsvchost.exe(CPU コア全体が 100% でした)。その特定のプロセスは、IIS Application Host Helper Service (AppHostSvc)をホストしていました。問題が発生すると、サーバーが何をしているかは問題になりません (サーバーが完全にアイドル状態になる可能性があり、サービスが CPU を食い尽くす可能性があります)。

プロセスを強制終了すると、問題はなくなります。IIS によってサービスが自動的に再起動された後、最小限の CPU が使用されます。

AppHostSvc サービスはIIS ホスト履歴構成を担当し、構成を自動的にバックアップします (デフォルトでは 2 分ごとだと思います)。IIS 構成の変更後に問題が発生する可能性があると思いました。いくつかの構成設定を変更しようとしましたが、効果がありませんでした (数分間待っても)。

最終的に何が原因かを突き止めましたが、バグのようです。以下の私自身の答えを参照してください。

4

1 に答える 1

0

トリガーは、AppHostSvc によって使用される履歴ディレクトリの "不適切な" アクセス許可であることが判明しました (既定では、それは%windir%\system32\inetsrv\History)

アクセス許可がデフォルト設定と一致することを確認した後、icacls /T /resetそのディレクトリ (および を含む他のいくつかinetsrv\config) で実行したところ、問題はなくなりました。


詳細

svchost.exeAppHostSvc が悪い状態で動かなくなったときのプロセスのダンプを取りました。スレッドの 1 つに、次のコール スタックがありました。

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 に答える