Perfmon 如何获取 "in Use" 内存

Perfmon how to get "in Use" memory

如果我查看任务管理器,我可以看到 "In Use" 内存。

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

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

Get-Counter -Counter 是在 PowerShell 2+ 中获取性能计数器的方法。 "In use" 看起来像是 Total Memory - Available:

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

我通常做的是运行以下获取电流: $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)

现在我们知道如何获取 current/In 使用内存,但获取平均值需要更多代码。 使用 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 来完成。