監視主機控制碼計數閾值

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

此監視會檢查 MonitoringHost.exe 處理程序的「處理程序\控制碼計數」平均計數器是否超過設定的閾值。當達到此閾值時,系統會自動觸發復原程序,以重新啟動健全狀況服務。

Knowledge Base article:

摘要

此規則會測量 MonitoringHost.exe 處理程序所有執行個體的 [Process\Handle Count] 使用量。如果它超過設定的閾值,回應會嘗試重新啟動健全狀況服務,確保電腦處理量不再超過負荷。

依據設定健全狀況服務執行的角色,會有多種不同閾值。以下是預設閾值摘要:

健全狀況服務角色

控制碼計數閾值

代理程式

2,000

管理伺服器

10,000

以下是會嘗試重新啟動健全狀況服務的回應之設定:

健全狀況服務角色

重新啟動回應行為

代理程式

已啟用

管理伺服器

無重新啟動回應

原因

可能原因的簡短摘要如下:

從設定此健全狀況服務的所有管理組件載入太多規則與監視。

設定錯誤的規則或監視收集太多資料或處理太多資料 (例如效能計數器集合規則會每 1 秒收集一次資料)

這可能是由執行多個管理組件的健全狀況服務所造成。每個管理組件可能有許多使用少量資源的監視。由於每個 MonitoringHost.exe 執行個體具有總計達數千個規則與監視的多個管理組件,可能會消耗更多資源。

視健全狀況服務所執行的監視類型而定,這是此健全狀況服務可能會發生的狀況。

另一個原因可能是有一個或多個規則與監視不符合某些最佳作法。例如嘗試每 1 秒收集一次效能資料的效能計數器規則。如果如此設定的規則與監視太多,會導致 MonitoringHoste.exe 處理程序消耗更多資源。

解決方式

代理程式上執行的此規則之預設動作為重新啟動健全狀況服務。因為此復原在代理程式上預設為啟用,使用者不須採取任何動作。

請注意,如果設定此代理程式的動作帳戶沒有正確權限重新啟動服務,健全狀況服務可能無法正確重新啟動。

如果情況如此,請啟動 HealthService Windows 服務。

如果您認為此代理程式執行之監視數量所使用的資源很適當,可以覆寫閾值或停用規則。

Element properties:

TargetMicrosoft.SystemCenter.Agent
Parent MonitorMicrosoft.SystemCenter.HealthService.ServiceStateRollup
CategoryStateCollection
EnabledTrue
Alert GenerateFalse
Alert Auto ResolveFalse
Monitor TypeMicrosoft.SystemCenter.Agent.Performance.AveragerThresholdWithSingleSampleSuccessState
RemotableFalse
AccessibilityInternal
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.Agent.MonitoringHost.HandleCountThreshold" Accessibility="Internal" Enabled="true" Target="SCLibrary!Microsoft.SystemCenter.Agent" ParentMonitorID="Microsoft.SystemCenter.HealthService.ServiceStateRollup" Remotable="false" Priority="High" TypeID="Microsoft.SystemCenter.Agent.Performance.AveragerThresholdWithSingleSampleSuccessState" ConfirmDelivery="false">
<Category>StateCollection</Category>
<OperationalStates>
<OperationalState ID="HandleCountUnderThreshold" MonitorTypeStateID="UnderThreshold" HealthState="Success"/>
<OperationalState ID="HandleCountOverThreshold" MonitorTypeStateID="OverThreshold" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ObjectName>Process</ObjectName>
<CounterName>Handle Count</CounterName>
<InstanceName>MonitoringHost*</InstanceName>
<Frequency>120</Frequency>
<NumSamples>5</NumSamples>
<Threshold>2000</Threshold>
</Configuration>
</UnitMonitor>