Utilizzo CPU dell'host per System Center 2012 Virtual Machine Manager

Microsoft.SystemCenter.VirtualMachineManager.2012.HostCPUUtilizationMonitor (UnitMonitor)

Monitora l'utilizzo della CPU dell'host

Knowledge Base article:

Riepilogo

Questo monitoraggio tiene traccia delle prestazioni della CPU nell'host. L'utilizzo della CPU è risultato superiore alla soglia specificata.

Cause

Le macchine virtuali in esecuzione nell'host utilizzano livelli critici di risorse della CPU nell'host.

Soluzioni

Per liberare risorse della CPU, eseguire la migrazione di una macchina virtuale in un altro host. È possibile inoltre abilitare l'ottimizzazione dinamica e lasciare eseguire automaticamente l'ottimizzazione dei cluster host da Virtual Machine Manager. Per informazioni sull'ottimizzazione dinamica, vedere la documentazione di Virtual Machine Manager.

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.2012.HyperVHost
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SystemCenter.VirtualMachineManager.2012.Performance.ScriptBasedConsecutiveSamplesTwoThresholdsMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Utilizzo elevato della CPU dell'host
L'utilizzo della CPU dell'host è {1} e ha superato il livello di avviso o il livello critico per {0}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.VirtualMachineManager.2012.HostCPUUtilizationMonitor" Accessibility="Public" Target="VMM2012Discovery!Microsoft.SystemCenter.VirtualMachineManager.2012.HyperVHost" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" TypeID="Microsoft.SystemCenter.VirtualMachineManager.2012.Performance.ScriptBasedConsecutiveSamplesTwoThresholdsMonitorType">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SystemCenter.VirtualMachineManager.2012.HostCPUUtilizationMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter1>
<AlertParameter2>$Data/Context/SampleValue$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="HostCPUUtilizationReachedWarning" MonitorTypeStateID="ConditionWarn" HealthState="Warning"/>
<OperationalState ID="HostCPUUtilizationReachedError" MonitorTypeStateID="ConditionError" HealthState="Error"/>
<OperationalState ID="HostCPUUtilizationIsSuccess" MonitorTypeStateID="ConditionSuccess" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>180</IntervalSeconds>
<TimeoutSeconds>180</TimeoutSeconds>
<WarningThreshold>80</WarningThreshold>
<CriticalThreshold>90</CriticalThreshold>
<NumSamples>3</NumSamples>
<Arguments/>
<ScriptBody><Script>
' Copyright (c) Microsoft Corporation. All rights reserved.
' VBScript source code
' HostCPUUtilizationProvider.vbs
Option Explicit

SetLocale("en-us")

' This Script is used to check the Host CPU utilization
' which includes parent partition and CPU utilizations caused by the vms
' Alert when the utilization of this partition is high:
' Warning: WarningThreshold%, like 80%
' Critical: CriticalThreshold, like 90%

Dim oAPI, oBag, oArgs, hostComputerName
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oArgs = Wscript.Arguments

Set oBag= oAPI.CreatePropertyBag()

Dim TimePeriodMiliSeconds, strQuery, strLPCountQuery, objWMIService, colItems, sleepTime, objItem

TimePeriodMiliSeconds = 10 * 1000
strQuery = "SELECT * FROM Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor where Name='_Total'"
strLPCountQuery = "SELECT * FROM Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor"
Dim F, T1 , P1 , T2 , P2 , CPU
Set objWMIService = GetObject("winmgmts:\\localhost\root\CIMV2")

'Get the LP Count
Set colItems = objWMIService.ExecQuery(strLPCountQuery,,48)
Dim LPCount
LPCount = -1
For Each objItem in colItems
LPCount = LPCount + 1
Next

if LPCount &lt; 1 then
WScript.quit 1
end if

'Take 2 readings
Set colItems = objWMIService.ExecQuery(strQuery,,48)
For Each objItem in colItems
T1 = objItem.PercentTotalRunTime
P1 = objItem.Timestamp_PerfTime
Next

Wscript.Sleep(TimePeriodMiliSeconds)

Set colItems = objWMIService.ExecQuery(strQuery,,48)

For Each objItem in colItems
F = objItem.Frequency_PerfTime
T2 = objItem.PercentTotalRunTime
P2 = objItem.Timestamp_PerfTime
Next

If P2 - P1 = 0 Then
Call oAPI.LogScriptEvent("HostCPUUtilizationCounter.vbs", 101, 0, "HostCPUUtilizationCounter.vbs was not called with 1 argument and was not executed.")
Wscript.quit 1
End If


'Calculate CPU readings with formula
CPU = (T2 - T1) / ( P2 - P1)
CPU = (F * CPU) / LPCount
CPU = Int(CPU / 100000)

if CPU &gt; 100 then
CPU = 100
end if

if CPU &lt; 0 then
CPU = 0
end if

CPU = CInt(CPU)

call oBag.AddValue("Utilization", CPU)
Call oAPI.LogScriptEvent("HostCPUUtilizationCounter.vbs", 102, 0, "HostCPUUtilizationCounter: " &amp; Int(CPU))
Call oAPI.Return(oBag)
</Script></ScriptBody>
<ObjectName>Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor</ObjectName>
<CounterName>PercentTotalRunTime</CounterName>
<InstanceName>_Total</InstanceName>
<Value>$Data/Property[@Name='Utilization']$</Value>
</Configuration>
</UnitMonitor>