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 来完成。
如果我查看任务管理器,我可以看到 "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 来完成。