使用 Powershell 找出哪些程序占用了大量内存(在 64 位 Windows 上)

使用 Powershell 找出哪些程序占用了大量内存(在 64 位 Windows 上)

我如何(在 Powershell 中)找出哪个进程/任何进程使用了​​最多的内存?

编辑:我试图弄清楚如何使用 Powershell 找出占用所有物理内存的内容,以防任务管理器等无法解释为什么所有物理 RAM 都用完了。也就是说,我需要识别缓存等使用的内存。

答案1

这是一种获取当前正在运行的进程信息并按工作集大小排序的方法

Get-Process | Sort-Object -Descending WS

将该输出分配给一个变量,它将为您提供一个结果数组,然后您可以直接写出数组的第一个成员(在本例中将是系统.诊断.进程目的)。

$ProcessList = Get-Process | Sort-Object -Descending WS
Write-Host $ProcessList[0].Handle "::" $Process.ProcessName "::" $Process.WorkingSet

下面是另一个快速而粗糙的脚本,使用 WMI 的 Win32_Process 提供程序从当前正在运行的进程列表中转储一些数据项:

$ProcessList = Get-WmiObject Win32_Process -ComputerName mycomputername
foreach ($Process in $ProcessList) {
    write-host $Process.Handle "::" $Process.Name "::" $Process.WorkingSetSize
}

这将列出 PID(句柄)、进程名称和当前工作集大小。您可以使用WMI 进程类

答案2

一行代码即可找到内存使用率最高的进程的名称

Get-Process | Sort-Object -Descending WS | select -first 1 | select -ExpandProperty ProcessName

答案3

$scripthost = Read-Host "Enter the Hostname of the Computer you would like to check Memory Statistics for"
""
""
"===========CPU - Top 10 Utilization List==========="
gwmi -computername $scripthost Win32_PerfFormattedData_PerfProc_Process| sort PercentProcessorTime -desc | select Name,PercentProcessorTime | Select -First 10 | ft -auto
"===========Memory - Top 10 Utilization List==========="
gwmi -computername $scripthost Win32_Process | Sort WorkingSetSize -Descending | Select Name,CommandLine,@{n="Private Memory(mb)";Expression = {[math]::round(($_.WorkingSetSize / 1mb), 2)}} | Select -First 10 | Out-String   
#gwmi -computername $scripthost Win32_Process | Sort WorkingSetSize -Descending | Select Name,CommandLine,@{n="Private Memory(mb)";e={$_.WorkingSetSize/1mb}} | Select -First 10 | Out-String
#$fields = "Name",@{label = "Memory (MB)"; Expression = {[math]::round(($_.ws / 1mb), 2)}; Align = "Right"}; 

"===========Server Memory Information==========="
$fieldPercentage = @{Name = "Memory Percentage in Use (%)"; Expression = { “{0:N2}” -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize)}};     
$fieldfreeram = @{label = "Available Physical Memory (MB)"; Expression = {[math]::round(($_.FreePhysicalMemory / 1kb), 2)}}; 
$fieldtotalram = @{label = "Total Physical Memory (MB)"; Expression = {[math]::round(($_.TotalVisibleMemorySize / 1kb), 2)}}; 
$fieldfreeVram = @{label = "Available Virtual Memory (MB)"; Expression = {[math]::round(($_.FreeVirtualMemory / 1kb), 2)}}; 
$fieldtotalVram = @{label = "Total Virtual Memory (MB)"; Expression = {[math]::round(($_.TotalVirtualMemorySize /1kb), 2)}}; 
$memtotal = Get-WmiObject -Class win32_OperatingSystem -ComputerName $scripthost; 
$memtotal | Format-List $fieldPercentage,$fieldfreeram,$fieldtotalram,$fieldfreeVram,$fieldtotalVram;

相关内容