Monitoring Host 句柄计数阈值

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

此监视器确保用于 "MonitoringHost.exe" 进程的 "Process\Handle Count" 计数器不超过对一系列连续样本设置的阈值。 如果符合条件,此监视器将更改为严重状态,随后将汇总到“运行状况服务状态”监视器。 “运行状况服务状态”监视器被配置为在其状态为严重时运行恢复,因此将自动尝试重新启动 System Center 管理运行状况服务。

Knowledge Base article:

摘要

此规则测量监视主机进程的所有实例的 Process\Handle Count 使用率。 如果超出了配置的阈值,响应将尝试重新启动 System Center 管理运行状况服务以确保它不会继续过度占用计算机。

有不同的阈值,具体取决于配置的 System Center 管理运行状况服务所执行的角色。 以下汇总了默认阈值:

System Center 管理运行状况服务角色

句柄计数阈值

代理

6,000

管理服务器

10,000

下面是尝试重新启动 System Center 管理运行状况服务的响应的配置:

System Center 管理运行状况服务角色

重新启动响应行为

代理

已启用

管理服务器

无重新启动响应

原因

可能原因可概述为:

从此 System Center 管理运行状况服务配置的所有管理包加载了太多规则和监视器。

配置错误的规则或监视器收集了太多数据或处理了太多数据(例如性能计数器收集规则每 1 秒收集一次数据)

这可能是由运行多个管理包的 System Center 管理运行状况服务导致的。 每个管理包可能有很多使用少量资源的监视。 由于很多管理包添加了数千条规则和监视器,每个监视主机实例可能开始消耗更多资源。

根据 System Center 管理运行状况服务正在执行的监视类型,此 System Center 管理运行状况服务预期可能会出现这种情况。

另一个原因可能是一个或多个规则和监视器不符合某些最佳方案。 一个例子是性能计数器规则尝试每 1 秒收集一次性能数据。 以这种方式配置的规则或监视器太多将导致 monitoring host.exe 进程消耗更多资源。

解决方法

在代理上运行的此规则的默认操作是重新启动 System Center 管理运行状况服务。 因为此恢复在代理上默认启用,无需用户操作。

请注意,如果此代理配置的操作帐户没有重新启动服务的正确权限,System Center 管理运行状况服务可能无法正确地重新启动。

如果是这种情况,请启动 System Center 管理运行状况服务窗口服务。

如果认为对于此代理执行的监视数量而言资源使用率是适当的,你可以替代阈值或禁用规则。

Element properties:

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

Source Code:

<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>