Utilisez Powershell pour découvrir ce qui utilise beaucoup de mémoire (sur Windows 64 bits)

9

Comment puis-je savoir (dans Powershell) quel processus / quoi utilise le plus de mémoire?

Edit: J'essaie de comprendre comment utiliser Powershell pour savoir ce qui utilise toute la mémoire physique au cas où le Gestionnaire des tâches, etc. ne parviendrait pas à expliquer pourquoi toute la RAM physique est utilisée. C'est-à-dire que j'ai besoin d'identifier la mémoire utilisée par les caches, etc.

Andrew J. Brehm
la source
À quel type de cache pensez-vous?
squillman
Cache disque ... Windows n'essaierait-il pas habituellement d'utiliser toute la mémoire physique disponible pour quelque chose d'utile?
Andrew

Réponses:

8

Voici un moyen d'obtenir des informations sur les processus en cours d'exécution et de les trier par taille de jeu de travail

Get-Process | Sort-Object -Descending WS

Assignez cette sortie à une variable et cela vous donnera un tableau des résultats, alors vous pouvez simplement écrire le premier membre du tableau (qui dans ce cas sera un objet System.Diagnostics.Process ).

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

Voici un autre script rapide et sale pour vider quelques éléments de données de la liste des processus en cours d'exécution à l'aide du fournisseur Win32_Process de WMI:

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

Cela listera le PID (handle), le nom du processus et la taille actuelle du jeu de travail. Vous pouvez changer cela en utilisant différentes propriétés de la classe WMI Process .

squillman
la source
Ma faute. Je n'étais pas assez clair. Question modifiée ...
Andrew J. Brehm
1

Une doublure pour trouver le nom de votre processus d'utilisation de la mémoire la plus élevée

Get-Process | Sort-Object -Descending WS | select -first 1 | select -ExpandProperty ProcessName
Eric
la source
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
la source