Perfmon如何获得" in use"记忆

时间:2017-03-24 18:23:54

标签: performance powershell memory perfmon

如果我查看任务管理器,我可以看到"使用中"记忆。 enter image description here

我知道我可以在PerfMon中获取性能信息,但我不知道Perfmon中的哪个计数器会检索此值。

我想写一个PowerShell脚本来查找过去一天的平均内存使用情况。 PerfMon是我能想到的唯一选择。在PowerShell中有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

Get-Counter -Counter是在PowerShell 2+中获得性能计数器的方法。 "在使用中"看起来它是Total Memory - Available的舍入值:

[math]::Round(((((Get-Ciminstance Win32_OperatingSystem).TotalVisibleMemorySize * 1kb) - ((Get-Counter -Counter "\Memory\Available Bytes").CounterSamples.CookedValue)) / 1GB),1)

答案 1 :(得分:0)

我通常做的是运行以下内容来获取当前信息: $UsedRAM变量就是您要找的。

$SystemInfo = Get-WmiObject -Class Win32_OperatingSystem | Select-Object Name, TotalVisibleMemorySize, FreePhysicalMemory
    $TotalRAM = $SystemInfo.TotalVisibleMemorySize/1MB
    $FreeRAM = $SystemInfo.FreePhysicalMemory/1MB
    $UsedRAM = $TotalRAM - $FreeRAM
    $RAMPercentFree = ($FreeRAM / $TotalRAM) * 100
    $TotalRAM = [Math]::Round($TotalRAM, 2)
    $FreeRAM = [Math]::Round($FreeRAM, 2)
    $UsedRAM = [Math]::Round($UsedRAM, 2)
    $RAMPercentFree = [Math]::Round($RAMPercentFree, 2)

现在我们知道如何获取当前/使用内存,但获得平均值需要更多代码。 使用Get-Counter我们可以设置平均值的计数器,但请注意,这只会提供测试期间的平均值,并且不会及时返回。

为了更好地理解平均值,我做了大约1000次计数。请注意,这也会占用内存。根据系统的语言,格式可能是错误的。

$interval = 1 #seconds
$maxsamples = 1000
$memorycounter = (Get-Counter "\Memory\Available MBytes" -maxsamples $maxsamples -sampleinterval $interval | 
select -expand countersamples | measure cookedvalue -average).average
### Memory Average Formatting ###
$freememavg = "{0:N0}" -f $memorycounter
### Get total Physical Memory & Calculate Percentage ###
$physicalmemory = (Get-WMIObject -class Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).Sum / 1mb
$physicalmemory - $memorycounter
#$physicalmemory - $freememavg #Depending on the Formatting of your system

这也可以通过CPU和DISK来完成。