WMI 内存使用率监视器

Microsoft.SystemCenter.WMIPrivateBytes.Monitor (UnitMonitor)

此监视器检查计算机上的 WMI 内存使用率。

Knowledge Base article:

摘要

此计算机上的 WMI 服务正在使用太多的内存。

此监视器将通过以下方式定期检查计算机上的 WMI 总内存使用量:为从 WmiPrv 开始中的所有进程实例检查 Private Bytes 计数器,然后将该计数器与 2 个阈值进行比较。默认情况下,如果任何 WMI 相关进程消耗超过 500MB 内存,则此监视器将进入警告状态。如果任何 WMI 相关进程消耗超过 600MB 内存,它将进入错误状态。

原因

可能的原因是 WMI 内存泄漏,导致 WMI 会随着时间的推移消耗越来越多的内存。

解决方法

如果你看到 WMI 内存问题的模式,则此监视器有禁用的恢复,该恢复将在超出警告或错误阈值时自动重新启动 WMI。如果你看到此方法解决了问题,则可以启用这些恢复其中之一。

外部

有关 WMI 问题疑难解答的详细信息,请转到 http://go.microsoft.com/fwlink/?LinkId=158224

也可以在 http://go.microsoft.com/fwlink/?LinkId=158226 下载 WMI 诊断实用程序。WMI 诊断实用程序是一个 VBScript 脚本,旨在帮助你对计算机上的 WMI 服务进行故障排除。

Element properties:

TargetMicrosoft.SystemCenter.Agent
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledFalse
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SystemCenter.Performance.FilteredDoubleThreshold.MonitorType
RemotableTrue
AccessibilityPublic
Alert Message
WMI 内存使用率高

WMI 内存使用率太高,实例 {0} 对象 {1} 计数器 {2} 在计算机 {4} 中具有值 {3}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.WMIPrivateBytes.Monitor" Accessibility="Public" Enabled="false" Target="SCLibrary!Microsoft.SystemCenter.Agent" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SystemCenter.Performance.FilteredDoubleThreshold.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SystemCenter.WMIPrivateBytes.Monitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/InstanceName$</AlertParameter1>
<AlertParameter2>$Data/Context/ObjectName$</AlertParameter2>
<AlertParameter3>$Data/Context/CounterName$</AlertParameter3>
<AlertParameter4>$Data/Context/Value$</AlertParameter4>
<AlertParameter5>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter5>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="UnderThreshold1" MonitorTypeStateID="UnderThreshold1" HealthState="Success"/>
<OperationalState ID="OverThreshold1UnderThreshold2" MonitorTypeStateID="OverThreshold1UnderThreshold2" HealthState="Warning"/>
<OperationalState ID="OverThreshold2" MonitorTypeStateID="OverThreshold2" HealthState="Error"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<CounterName>Private Bytes</CounterName>
<ObjectName>Process</ObjectName>
<InstanceName/>
<AllInstances>true</AllInstances>
<Frequency>300</Frequency>
<Expression>
<RegExExpression>
<ValueExpression>
<XPathQuery Type="String">InstanceName</XPathQuery>
</ValueExpression>
<Operator>ContainsSubstring</Operator>
<Pattern>WmiPrv</Pattern>
</RegExExpression>
</Expression>
<Threshold1>524288000</Threshold1>
<Threshold2>629145600</Threshold2>
</Configuration>
</UnitMonitor>