Utilisation m?moire des VMs
Cela fait un moment que j’essaye de trouver le juste ?quilibre entre l’allocation de ressource et ce que les utilisateurs demandent.
Tr?s souvent, c’est TRES largement sur-?valu?. Bien sur, VMware ESXi s’en sort tr?s bien et optimise ? la vol?e, mais… j’aime pas.
J’ai donc cherch? comment mesurer les ressources r?ellement utilis?es et j’en suis arriv? ? ces conclusions:
- VMware montre ce que les VMs utilisent REELLEMENT.
- Si vous d?marrez un Windows et le laissez ? ne rien faire pendant des jours, VMware vous montrera une utilisation de quelques centaines de Mo, pas plus. Or, si vous regardez le Gestionnaire des taches, vous constaterez une utilisation de 2 Go… Comment Est-ce possible?
- VMware note ce qui est r?ellement utilis?. Or, Windows ne fout rien… Donc, VMware montre qu’il n’utilise rien..
- Windows r?serve ses ressources pour le cas o?. Typiquement, un SQL Server va manger la quasi totalit? de RAM disponible pour lui tout seul (gourmand) alors que potentiellement, il n’en utilise que quelques Mo… Gourmand !
- Un bon DBA pourra limiter l’utilisation de la RAM par SQL Server pour ?viter qu’il ne vampirise toute la RAM.
Mais comment trouver la « v?rit? » dans ce merdier? Ben… En mesurant les 2 et en r?fl?chissant.
Les 3 sont :
- Utilisation r?elle (VMware side)
- Utilisation Windows
- Le croisement des deux
Allons-y :
1. Ressources sur les 5 derniers jours
(au del?, il agr?ge les donn?es, et ca ne veux plus rien dire)
Function Get-TrueUsage { ? param ($Name, $Start=((get-date).adddays(-5)), $End=(get-date)) # Usage : Get-TrueUsage -Name VM01 -Start ((get-date).addMonths(-2)) -End (get-date) ? $MyVM=Get-VM -Name $name ? $MyVMView=$MyVM | get-view ? $obj=New-Object PSObject ? $obj | add-Member Noteproperty -name Name -value $Name ? $obj | add-Member Noteproperty -name Datacenter -value $MyVM | Get-Datacenter ? $StatsESX= $MyVM | select Name, @{n="AssignedMemory";e={$_.MemoryGB*1024*1024}}, @{n="HostMemoryUsage";e={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage*1024}} ? $StatsMemGuest=? Get-Stat -Entity ($MyVM ) -Start $Start -Finish $End -Stat mem.active.average | measure -max -min -Average Value ? $StatsCpuGuest=? Get-Stat -Entity ($MyVM ) -Start $Start -Finish $End -Stat cpu.usage.average? | measure -max -min -Average Value ? $obj | add-Member -MemberType Noteproperty -name AssignedMem?? -value $StatsESX.AssignedMemory ? $obj | add-Member -MemberType Noteproperty -name HostUsedMem?? -value $StatsESX.HostMemoryUsage ? $obj | Add-Member -MemberType NoteProperty -Name CPUSocket???? -Value ($MyVMView.config.hardware.NumCPU/(@{$true=$MyVMView.config.hardware.NumCoresPerSocket;$False=1}[$MyVMView.config.hardware.NumCoresPerSocket -gt 0 ])) ? $obj | Add-Member -MemberType NoteProperty -Name Corepersocket -Value @{$true=$MyVMView.config.hardware.NumCoresPerSocket;$False=1}[$MyVMView.config.hardware.NumCoresPerSocket -gt 0 ] ? $obj | add-Member -MemberType Noteproperty -name GuestMaxMem?? -value (($StatsMemGuest.Maximum) ) ? $obj | add-Member -MemberType Noteproperty -name GuestMinMem?? -value (($StatsMemGuest.Minimum) ) ? $obj | add-Member -MemberType Noteproperty -name GuestAvgMem?? -value ([math]::round($StatsMemGuest.Average) ) ? $obj | add-Member -MemberType Noteproperty -name MemPrivShar?? -value ($MyVM.ExtensionData.Summary.QuickStats.PrivateMemory + $MyVM.ExtensionData.Summary.QuickStats.SharedMemory) ? $obj | add-Member -MemberType Noteproperty -name GaspillageMem -value (([Math]::round((1-($StatsMemGuest.Maximum/$StatsESX.AssignedMemory)) *10000 ))/10000 ) ? $obj | Add-Member -MemberType NoteProperty -Name GuestMaxCpu?? -value ([Math]::round(($StatsCpuGuest.Maximum)*100 )/10000) ? $obj | Add-Member -MemberType NoteProperty -Name GuestMinCpu?? -value ([Math]::round(($StatsCpuGuest.Minimum)*100 )/10000) ? $obj | Add-Member -MemberType NoteProperty -Name GuestAvgCpu?? -value ([math]::round(($StatsCpuGuest.Average)*100 )/10000) ? $obj | add-Member -MemberType Noteproperty -name GaspillageCpu -value ([Math]::truncate($MyVMView.config.hardware.NumCPU - ($MyVMView.config.hardware.NumCPU*($StatsCpuGuest.Maximum/100)))) ## WMI ? try{ ??? $WMIPageFile=Get-WmiObject Win32_PageFileUsage -ComputerName $MyVM | select Name,CurrentUsage,AllocatedBaseSize,PeakUsage,TempPageFile ? } catch { ??? $WMIPageFile=''|select Name,CurrentUsage,AllocatedBaseSize,PeakUsage,TempPageFile ? } ? $obj | Add-Member -MemberType NoteProperty -Name SwapFile????????? -value ($WMIPageFile.Name) ? $obj | Add-Member -MemberType NoteProperty -Name SwapCurrentUsage? -value ($WMIPageFile.CurrentUsage) ? $obj | Add-Member -MemberType NoteProperty -Name SwapAllocatedSize -value ($WMIPageFile.AllocatedBaseSize) ? $obj | Add-Member -MemberType NoteProperty -Name SwapPeak????????? -value ($WMIPageFile.PeakUsage) ? # Calculs recommandations ? # Pic m?moire + 20% et ensuite par blocks rond ? $NewMem=$obj.GuestMaxMem *1.2 /1024 ? switch ($true) { ??? ( $NewMem -gt 4096) {$NewMem=([Math]::Truncate($NewMem / 2048)+1)*2048;break} ??? ( $NewMem -gt 3072) {$NewMem=4096;break} ??? ( $NewMem -gt 2048) {$NewMem=3072;break} ??? ( $NewMem -gt 1024) {$NewMem=2048;break} ??? ( $NewMem -gt 512)? {$NewMem=1024;break} ??? default???????????? {$NewMem=512;break} ? } ? # Pic CPU ? $NewCpu=[System.Math]::Round($obj.GuestMaxCpu * $obj.CPUSocket * $obj.Corepersocket ,0) ? if (($obj.CPUSocket + $obj.Corepersocket) -gt 2 -and $NewCpu -le 1 ) {$NewCpu=2} ? if ($NewCpu -le 1 ) {$NewCpu=1} ? $obj | Add-Member -MemberType NoteProperty -Name RecommendedMemory -value $NewMem ? $obj | Add-Member -MemberType NoteProperty -Name RecommendedCpu??? -value $NewCpu ? $obj }
Le Performance Monitor
Ce truc peux sauver tout un tas de compteur de votre machine. Les ressources sont quasiment illimit?es, une vrai mine d’or.
REM Delete the counter if it allready exist. logman STOP VMWARE_AUDIT_MEMORY logman DELETE VMWARE_AUDIT_MEMORY REM Create the counter logman CREATE counter VMWARE_AUDIT_MEMORY -f bincirc -max 500 -si 2 --v -o "C:\perflogs\VMWARE_AUDIT_MEMORY" -c "\Memory\Available MBytes" REM We need to delete the old file as the DataCollector does not support an existing file. del C:\perflogs\VMWARE_AUDIT_MEMORY.blg logman START VMWARE_AUDIT_MEMORY
Le m?lange des 2
Bon, ben… J’en suis pas encore l?…
On va comparer l’utilisation r?elle VMware (get-stat), les ressources utilis?es par la VM (perfmon), la swap (wmi),…
Laisser un commentaire