当 "MonitoringHost.exe" 进程超过 Process\Handle Count 阈值时,重新启动运行状况服务。
此规则默认情况下处于禁用状态,因为它已被监视器所取代。
此规则测量 MonitoringHost.exe 进程所有实例的 Process\Handle Count 使用率。 如果超过了所配置的阈值,将生成警报。
有不同的阈值,具体取决于配置的 System Center 管理运行状况服务所执行的角色。 以下汇总了默认阈值:
System Center 管理运行状况服务角色 | 句柄计数阈值 |
代理 | 2,000 |
管理服务器 | 10,000 |
下面是尝试重新启动 System Center 管理运行状况服务的响应的配置:
System Center 管理运行状况服务角色 | 重新启动响应行为 |
代理 | 已启用 |
管理服务器 | 无重新启动响应 |
可能原因可概述为:
从此 System Center 管理运行状况服务配置的所有管理包加载了太多规则和监视器。 |
配置错误的规则或监视器收集了太多数据或处理了太多数据(例如性能计数器收集规则每 1 秒收集一次数据) |
这可能是由运行多个管理包的 System Center 管理运行状况服务导致的。 每个管理包可能有很多使用少量资源的监视。 由于很多管理包添加了数千条规则和监视器,每个 MonitoringHost.exe 实例可能开始消耗更多资源。
根据 System Center 管理运行状况服务正在执行的监视类型,此 System Center 管理运行状况服务预期可能会出现这种情况。
另一个原因可能是一个或多个规则和监视器不符合某些最佳方案。 一个例子是性能计数器规则尝试每 1 秒收集一次性能数据。 以这种方式配置的规则或监视器太多将导致 monitoring host.exe 进程消耗更多资源。
运行在管理服务器上的此规则的默认操作是生成警报。
如果认为对于此代理执行的监视数量而言资源使用率是适当的,你可以替代阈值或禁用发现。
如果 System Center 管理运行状况服务及其相关联的 MonitoringHost.exe 进程仍然消耗太多资源,你可以重新启动 System Center 管理运行状况服务 Windows 服务以缓解此问题。
Target | Microsoft.SystemCenter.ManagementServer | ||
Category | Maintenance | ||
Enabled | False | ||
Instance Name | Process | ||
Counter Name | Handle Count | ||
Frequency | 120 | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Remotable | True | ||
Alert Message |
|
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DataSource | DataSource | System.Performance.DataProvider | Default |
CDAveragerThreshold | ConditionDetection | System.Performance.AverageThresholdCondition | Default |
Alert | WriteAction | System.Health.GenerateAlert | Default |
<Rule ID="Microsoft.SystemCenter.ManagementServer.MonitoringHost.HandleCountThreshold" Enabled="false" Target="SCLibrary!Microsoft.SystemCenter.ManagementServer" ConfirmDelivery="false" Remotable="true" Priority="High" DiscardLevel="100">
<Category>Maintenance</Category>
<DataSources>
<DataSource ID="DataSource" TypeID="Performance!System.Performance.DataProvider">
<CounterName>Handle Count</CounterName>
<ObjectName>Process</ObjectName>
<InstanceName>MonitoringHost*</InstanceName>
<Frequency>120</Frequency>
</DataSource>
</DataSources>
<ConditionDetection ID="CDAveragerThreshold" TypeID="Performance!System.Performance.AverageThresholdCondition">
<NumSamples>5</NumSamples>
<Threshold>10000</Threshold>
<Operator>Greater</Operator>
</ConditionDetection>
<WriteActions>
<WriteAction ID="Alert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>2</Severity>
<AlertName/>
<AlertDescription/>
<AlertOwner/>
<AlertMessageId>$MPElement[Name="Microsoft.SystemCenter.ManagementServer.MonitoringHost.HandleCountThreshold.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/InstanceName$</AlertParameter1>
<AlertParameter2>$Data/Value$</AlertParameter2>
</AlertParameters>
<Suppression>
<SuppressionValue>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>