Restarts the HealthService when the MonitoringHost.exe process exceeds the Process\Private Bytes threshold.
This rule measures the Process\Private Bytes utilization for all instances of the MonitoringHost.exe process. If it exceeds the configured threshold, an alert is generated.
There are different thresholds depending on the role that Health Service configured to perform. The following summarizes the default thresholds:
Health Service Role | Private Bytes Threshold |
Agent | 100 MB |
Management Server | 1,500 MB |
Below is the configuration for the response that attempts to restart the Health Service:
Health Service Role | Restart Response Behavior |
Agent | Enabled |
Management Server | No restart response |
A brief summary of potential causes are:
Too many rules and monitors are loaded from all the management packs this Health Service has been configured with. |
A misconfigured rule or monitor collecting too much data or processing too much data (e.g. performance counter collection rule collecting data every 1 second) |
This can be caused by the Health Service running many management packs. Each Management Pack may have a lot of monitoring that uses a small amount of resources. With many management packs that add up to many thousands of rules and monitors, each MonitoringHost.exe instance may start consuming more resources.
This may be expected for this Health Service depending on the type of monitoring the Health Service is performing.
Another cause could be one or more rules and monitors that are not conforming to some best practices. An example is a performance counter rule that attempts to collect performance data every 1 second. Too many rules or monitors configured this way will cause the MonitoringHoste.exe process to consume more resources.
The default action for this rule running on Management Servers is to alert.
If you feel that the resource utilization is appropriate for the amount of monitoring being performed by this agent, you can override the threshold or disable the recovery.
If the Health Service and its associated MonitoringHost.exe process are still consuming too many resources, you can restart the HealthService windows service to mitigate this problem.
Target | Microsoft.SystemCenter.ManagementServer | ||
Category | Maintenance | ||
Enabled | True | ||
Instance Name | Process | ||
Counter Name | Private Bytes | ||
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.PrivateBytesThreshold" Enabled="true" 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>Private Bytes</CounterName>
<ObjectName>Process</ObjectName>
<InstanceName>MonitoringHost*</InstanceName>
<Frequency>120</Frequency>
</DataSource>
</DataSources>
<ConditionDetection ID="CDAveragerThreshold" TypeID="Performance!System.Performance.AverageThresholdCondition">
<NumSamples>5</NumSamples>
<Threshold>1610612736</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.PrivateBytesThreshold.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>