Использование памяти узла (System Center 2019+ Virtual Machine Manager)

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
Высокий уровень использования памяти узла
Использование памяти узла {0} составляет {1}, что превышает порог предупреждения или критический порог.
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>