Use Powershell para descubrir qué usa mucha memoria (en Windows de 64 bits)

9

¿Cómo puedo averiguar (en Powershell) qué proceso / lo que más utiliza la memoria?

Editar: Estoy tratando de descubrir cómo usar Powershell para descubrir qué está usando toda la memoria física en caso de que el Administrador de tareas, etc., no explique por qué se usa toda la RAM física. Es decir, necesito identificar la memoria utilizada por los cachés, etc.

Andrew J. Brehm
fuente
¿En qué tipo de caché estás pensando?
Squillman
Caché de disco ... ¿Windows normalmente no intenta usar toda la memoria física disponible para algo útil?
Andrew J. Brehm

Respuestas:

8

Aquí hay una manera de obtener información sobre los procesos que se ejecutan actualmente y ordenarlos por tamaño de conjunto de trabajo

Get-Process | Sort-Object -Descending WS

Asigne esa salida a una variable y le dará una matriz de los resultados, luego puede escribir el primer miembro de la matriz (que en este caso será un objeto System.Diagnostics.Process ).

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

Aquí hay otro script rápido y sucio para volcar algunos elementos de datos de la lista de procesos actualmente en ejecución utilizando el proveedor Win32_Process de WMI:

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

Eso enumerará el PID (identificador), el nombre del proceso y el tamaño actual del conjunto de trabajo. Puede cambiar eso usando diferentes propiedades de la clase de proceso WMI .

squillman
fuente
Culpa mía. No estaba lo suficientemente claro. Pregunta editada ...
Andrew J. Brehm
1

Un trazador de líneas para encontrar el nombre de su proceso de uso de memoria más alto

Get-Process | Sort-Object -Descending WS | select -first 1 | select -ExpandProperty ProcessName
Eric
fuente
0
$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;
Suresh
fuente