Monitoring Host Private Bytes Threshold

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

This monitor ensures that the "Process\Private Bytes" counter for the "MonitoringHost.exe" processes do not exceed a set threshold over a series of consecutive samples. If the conditions are met, this monitor will change to a critical state, which will then roll up to the "Health Service State" monitor. The "Health Service State" monitor is configured to run a recovery when its state is critical, which will automatically attempt to restart the System Center Management Health Service.

Knowledge Base article:

Summary

This rule measures the Process\Private Bytes utilization for all instances of the Monitoring Host process. If it exceeds the configured threshold, a response attempts to restart the System Center Management Health Service to ensure it doesn't continue to overwhelm the computer.

There are different thresholds depending on the role that the System Center Management Health Service is configured to perform. The following summarizes the default thresholds:

System Center Management Health Service Role

Private Bytes Threshold

Agent

300 MB

Management Server

1,500 MB

Below is the configuration for the response that attempts to restart the System Center Management Health Service:

System Center Management Health Service Role

Restart Response Behavior

Agent

Enabled

Management Server

No restart response

Causes

A brief summary of potential causes are:

Too many rules and monitors are loaded from all the management packs this System Center Management 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 System Center Management 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 Monitoring Host instance may start consuming more resources.

This may be expected for this System Center Management Health Service depending on the type of monitoring the System Center Management 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 monitoring host.exe process to consume more resources.

Resolutions

The default action for this rule running on agents is to restart the System Center Management Health Service. Because this recovery is enabled by default on agents, no user action is required.

Note that the System Center Management Health Service may not restart correctly if the action account that this agent has been configured with does not have the right permissions to restart the service.

If this is the case, start the System Center Management Health Service windows service.

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

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.PrivateBytesThreshold" 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="PrivateBytesUnderThreshold" MonitorTypeStateID="UnderThreshold" HealthState="Success"/>
<OperationalState ID="PrivateBytesOverThreshold" MonitorTypeStateID="OverThreshold" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</ComputerName>
<ObjectName>Process</ObjectName>
<CounterName>Private Bytes</CounterName>
<InstanceName>MonitoringHost*</InstanceName>
<AllInstances>false</AllInstances>
<Frequency>120</Frequency>
<NumSamples>5</NumSamples>
<Threshold>1610612736</Threshold>
<Direction>greater</Direction>
</Configuration>
</UnitMonitor>