このモニターは、MonitoringHost.exe プロセスの "Process\Handle Count" カウンターが、連続するいくつかのサンプルで、設定済みのしきい値を超えないようにします。しきい値を超えた場合は、このモニターの状態が "重大" に変わり、"ヘルス サービスの状態" モニターにロールアップします。"ヘルス サービスの状態" モニターは、その状態が重大になったときに回復処理を実行するように構成されており、自動的にヘルス サービスを再開しようとします。
このルールは、MonitoringHost.exe プロセスすべてのインスタンスの Process\Handle Count 利用率を測定します。利用率が構成済みのしきい値を超えると、コンピューターが過負荷のままにならないように、応答によってヘルス サービスが再開されます。
ヘルス サービスで実行するように構成されたロールに応じて、異なるしきい値があります。既定のしきい値の概要を以下に示します。
ヘルス サービス ロール | Handle Count のしきい値 |
エージェント | 6,000 |
管理サーバー | 10,000 |
ヘルス サービスの再開を試行する応答の構成を以下に示します。
ヘルス サービス ロール | 再開の応答動作 |
エージェント | 有効 |
管理サーバー | 再開の応答なし |
考えられる原因の概要:
このヘルス サービスが構成されている管理パックから、過剰なルールおよびモニターがロードされています。 |
ルールまたはモニターが誤って構成されていることが原因で、過剰なデータ コレクションまたは過剰なデータ処理が実行されています (たとえば、パフォーマンス カウンターの収集ルールにより、1 秒ごとにデータが収集されている)。 |
ヘルス サービスが多数の管理パックを実行していると、この問題が発生する場合があります。各管理パックに、リソースをあまり消費しない監視が多数存在する可能性があります。管理パックの数が増えると、ルールおよびモニターの数が数千になり、各 MonitoringHost.exe インスタンスで消費するリソースが増える場合があります。
ヘルス サービスが実行している監視の種類によって、この問題が発生する場合があります。
別の原因としては、1 つまたは複数のルールおよびモニターがベスト プラクティスに沿っていないことが考えられます。1 秒ごとにパフォーマンス データを収集するパフォーマンス カウンター ルールなどは、その例です。このように構成されているルールまたはモニターが多すぎると、monitoring host.exe プロセスで消費されるリソースが増えます。
エージェント上で動作するこのルールの既定の動作では、ヘルス サービスが再開されます。この回復はエージェント上で既定で有効になっているので、ユーザーの操作は不要です。
このエージェントが構成されているアクション アカウントにサービスを再開する権限がない場合、ヘルス サービスが正しく再開しない可能性があります。
この場合、Windows のヘルス サービスを開始してください。
このエージェントが実行している監視量に対して、リソースの利用率が妥当であると判断した場合は、しきい値を無効にするか、このルールを無効にしてかまいません。
Target | Microsoft.SystemCenter.Agent |
Parent Monitor | Microsoft.SystemCenter.HealthService.ServiceStateRollup |
Category | PerformanceHealth |
Enabled | True |
Alert Generate | False |
Alert Auto Resolve | True |
Monitor Type | Microsoft.SystemCenter.Agent.Performance.ConsecutiveSamplesThreshold.MonitorType |
Remotable | False |
Accessibility | Public |
RunAs | Default |
<UnitMonitor ID="Microsoft.SystemCenter.Agent.MonitoringHost.HandleCountThreshold" Accessibility="Public" Enabled="true" Target="SCLibrary!Microsoft.SystemCenter.Agent" ParentMonitorID="Microsoft.SystemCenter.HealthService.ServiceStateRollup" Remotable="false" Priority="High" 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>MonitoringHost*</InstanceName>
<AllInstances>false</AllInstances>
<Frequency>120</Frequency>
<NumSamples>5</NumSamples>
<Threshold>6000</Threshold>
<Direction>greater</Direction>
</Configuration>
</UnitMonitor>