System Center 2019+ Virtual Machine Manager Host Memory Utilization

Microsoft.SystemCenter.VirtualMachineManager.HostMemoryUtilizationMonitor (UnitMonitor)

監視主機記憶體使用率

Knowledge Base article:

摘要

此監視會追蹤主機目前使用的記憶體容量。主機的可用記憶體低於閾值。

原因

主機上執行的虛擬機器正在耗用大量的主機記憶體。

解決方式

若要釋出其他主機記憶體,請將虛擬機器移轉至另一部主機。若要讓 Virtual Machine Manager 自動負載平衡主機叢集,請啟用動態最佳化功能。如需動態最佳化的詳細資訊,請參閱 Virtual Machine Manager 說明文件。

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.Discovery.HyperVHost
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SystemCenter.VirtualMachineManager.Performance.PowershellBasedConsecutiveSamplesTwoThresholdsMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
主機記憶體使用率過高
主機記憶體使用率為 {1},已超過 {0} 的警告或重大等級
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.VirtualMachineManager.HostMemoryUtilizationMonitor" Accessibility="Public" Target="VMMDiscovery!Microsoft.SystemCenter.VirtualMachineManager.Discovery.HyperVHost" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" TypeID="Microsoft.SystemCenter.VirtualMachineManager.Performance.PowershellBasedConsecutiveSamplesTwoThresholdsMonitorType">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SystemCenter.VirtualMachineManager.HostMemoryUtilizationMonitor.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="MemoryUtilizationReachedWarning" MonitorTypeStateID="ConditionWarn" HealthState="Warning"/>
<OperationalState ID="MemoryUtilizationReachedError" MonitorTypeStateID="ConditionError" HealthState="Error"/>
<OperationalState ID="MemoryUtilizationIsSuccess" MonitorTypeStateID="ConditionSuccess" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>180</IntervalSeconds>
<TimeoutSeconds>180</TimeoutSeconds>
<WarningThreshold>90</WarningThreshold>
<CriticalThreshold>95</CriticalThreshold>
<NumSamples>3</NumSamples>
<hostComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</hostComputerName>
<ScriptBody><Script># Copyright (c) Microsoft Corporation. All rights reserved.
# Powershell source code
# HostMemoryUtilizationCounter.ps1

# This Script is used to check the Host memory utilization
# Alert when the utilization of this partition is high:
# Warning: WarningThreshold%, like 80%
# Critical: CriticalThreshold, like 90%

param($hostComputerName)

$momAPI = new-object -comObject MOM.ScriptAPI
$error.Clear();
$oBag = $momAPI.CreatePropertyBag();

$colItems = gcim Win32_OperatingSystem;

foreach($objItem in $colItems){
if($objItem.TotalVisibleMemorySize -gt 0){
$performanceUtilization = (($objItem.TotalVisibleMemorySize - $objItem.FreePhysicalMemory)/$objItem.TotalVisibleMemorySize)*100;
}
}

if($performanceUtilization -lt 0){
$performanceUtilization = 0;
}

$performanceUtilization = [int]$performanceUtilization;

$oBag.AddValue("Utilization",$performanceUtilization);
$oBag;</Script></ScriptBody>
<ObjectName>win32_PerfFormattedData_Perfos_Memory</ObjectName>
<CounterName>PercentCommittedBytesInUse</CounterName>
<InstanceName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</InstanceName>
<Value>$Data/Property[@Name='Utilization']$</Value>
</Configuration>
</UnitMonitor>