System Center 2016 Virtual Machine Manager – gazdagép processzorkihasználtsága

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

Figyeli a gazdagép processzorkihasználtságát.

Knowledge Base article:

Összefoglalás

Ez a figyelő nyomon követi a processzorteljesítményt a gazdagépen. A CPU-használat túllépte a küszöbértéket.

Okok

A gazdagépen futó virtuális gépek kritikus mennyiségű processzor-erőforrást használnak fel a gazdagépen.

Megoldások

Processzor-erőforrások felszabadításához telepítsen át egy virtuális gépet egy másik gazdagépre. A Virtual Machine Manager használatával automatikusan is optimalizálhatja a gazdagépfürtöket, ha engedélyezi a dinamikus optimalizálást. A dinamikus optimalizálásra vonatkozó további információért tekintse át a Virtual Machine Manager dokumentációját.

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.2016.HyperVHost
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SystemCenter.VirtualMachineManager.2016.Performance.ScriptBasedConsecutiveSamplesTwoThresholdsMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
A gazdagép processzorkihasználtsága magas.
A gazdagép processzorkihasználtsága {1}, és túllépte a figyelmeztetési vagy a kritikus szintet a következőnél: {0}.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.VirtualMachineManager.2016.HostCPUUtilizationMonitor" Accessibility="Public" Target="VMM2016Discovery!Microsoft.SystemCenter.VirtualMachineManager.2016.HyperVHost" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" TypeID="Microsoft.SystemCenter.VirtualMachineManager.2016.Performance.ScriptBasedConsecutiveSamplesTwoThresholdsMonitorType">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SystemCenter.VirtualMachineManager.2016.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>90</WarningThreshold>
<CriticalThreshold>95</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.Return(oBag)</Script></ScriptBody>
<ObjectName>Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor</ObjectName>
<CounterName>PercentTotalRunTime</CounterName>
<InstanceName>_Total</InstanceName>
<Value>$Data/Property[@Name='Utilization']$</Value>
</Configuration>
</UnitMonitor>