ヘルス サービスのハンドル数のしきい値

Microsoft.SystemCenter.Agent.HealthService.HandleCountThreshold (UnitMonitor)

このモニターは、HealthService.exe プロセスの "Process\Handle Count" カウンターが、連続するいくつかのサンプルで、設定済みのしきい値を超えないようにします。しきい値を超えた場合は、このモニターの状態が "重大" に変わり、"ヘルス サービスの状態" モニターにロールアップします。"ヘルス サービスの状態" モニターは、その状態が重大になったときに回復処理を実行するように構成されており、自動的にヘルス サービスを再開しようとします。

Knowledge Base article:

概要

このユニット モニターは、HealthService.exe プロセスの Process\Handle Count 利用率を測定します。利用率が構成済みのしきい値を超えると、コンピューターが過負荷のままにならないように、回復処理によってヘルス サービスが再開されます。

ヘルス サービスで実行するように構成されたロールに応じて、異なるしきい値があります。既定のしきい値の概要を以下に示します。

ヘルス サービス ロール

Handle Count のしきい値

エージェント

6,000

管理サーバー

10,000

ヘルス サービスの再開を試行する回復処理の構成を以下に示します。

ヘルス サービス ロール

再開の回復動作

エージェント

有効

管理サーバー

無効

原因

考えられる原因の概要:

このヘルス サービスが構成されている管理パックから、過剰なルールおよびモニターがロードされています。

ルールまたはモニターが誤って構成されていることが原因で、過剰なデータ コレクションまたは過剰なデータ処理が実行されています (たとえば、パフォーマンス カウンターの収集ルールにより、1 秒ごとにデータが収集されている)。

ヘルス サービスが多数の管理パックを実行していると、この問題が発生する場合があります。各管理パックに、リソースをあまり消費しない監視が多数存在する可能性があります。管理パックの数が増えると、ルールおよびモニターの数が数千になり、ヘルス サービスで消費するリソースが増える場合があります。

ヘルス サービスが実行している監視の種類によって、この問題が発生する場合があります。

別の原因としては、1 つまたは複数のルールおよびモニターがベスト プラクティスに沿っていないことが考えられます。1 秒ごとにパフォーマンス データを収集するパフォーマンス カウンター ルールなどは、その例です。このように、構成されているルールまたはモニターが多すぎると、ヘルス サービスと関連プロセスによって消費されるリソースが増える原因になります。

解決方法

エージェント上で動作するこのモニターの既定の動作では、ヘルス サービスが再開されます。この回復はエージェント上で既定で有効になっているので、ユーザーの操作は不要です。

それでもこのモニターの状態が "重大" のままである場合は、ヘルス サービスが正しく再開されていないか、このエージェントが構成されているアクション アカウントにサービスを再起動する権限がありません。

この場合、Windows のヘルス サービスを開始してください。

Element properties:

TargetMicrosoft.SystemCenter.HealthService
Parent MonitorMicrosoft.SystemCenter.HealthService.ServiceStateRollup
CategoryPerformanceHealth
EnabledTrue
Alert GenerateFalse
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SystemCenter.Agent.Performance.ConsecutiveSamplesThreshold.MonitorType
RemotableTrue
AccessibilityPublic
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.Agent.HealthService.HandleCountThreshold" Accessibility="Public" Enabled="true" Target="SCLibrary!Microsoft.SystemCenter.HealthService" ParentMonitorID="Microsoft.SystemCenter.HealthService.ServiceStateRollup" Remotable="true" Priority="Normal" TypeID="Microsoft.SystemCenter.Agent.Performance.ConsecutiveSamplesThreshold.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<OperationalStates>
<OperationalState ID="HandleCountUnderThreshold" MonitorTypeStateID="UnderThreshold" HealthState="Success"/>
<OperationalState ID="HandleCountOverThreshold" MonitorTypeStateID="OverThreshold" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</ComputerName>
<ObjectName>Process</ObjectName>
<CounterName>Handle Count</CounterName>
<InstanceName>HealthService</InstanceName>
<AllInstances>false</AllInstances>
<Frequency>120</Frequency>
<NumSamples>5</NumSamples>
<Threshold>6000</Threshold>
<Direction>greater</Direction>
</Configuration>
</UnitMonitor>