Verwenden Sie Powershell, um herauszufinden, was viel Speicher benötigt (unter 64-Bit-Windows).

9

Wie finde ich (in Powershell) heraus, welcher Prozess / was auch immer den meisten Speicher benötigt?

Bearbeiten: Ich versuche herauszufinden, wie Powershell verwendet wird, um herauszufinden, wie der gesamte physische Speicher verwendet wird, falls der Task-Manager usw. nicht erklärt, warum der gesamte physische RAM belegt ist. Dh ich muss den von Caches usw. verwendeten Speicher identifizieren.

Andrew J. Brehm
quelle
An was für einen Cache denkst du?
Squillman
Festplatten-Cache ... Würde Windows normalerweise nicht versuchen, den gesamten verfügbaren physischen Speicher für etwas Nützliches zu verwenden?
Andrew J. Brehm

Antworten:

8

Hier finden Sie eine Möglichkeit, Informationen zu aktuell ausgeführten Prozessen abzurufen und nach Größe des Arbeitssatzes zu sortieren

Get-Process | Sort-Object -Descending WS

Wenn Sie diese Ausgabe einer Variablen zuweisen, erhalten Sie ein Array mit den Ergebnissen. Anschließend können Sie einfach das erste Mitglied des Arrays ausschreiben (in diesem Fall ein System.Diagnostics.Process- Objekt).

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

Hier ist ein weiteres schnelles und schmutziges Skript, mit dem Sie einige Datenelemente aus der Liste der aktuell ausgeführten Prozesse mit dem Win32_Process-Anbieter von WMI sichern können:

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

Daraufhin werden die PID (Handle), der Prozessname und die aktuelle Größe des Arbeitssatzes aufgelistet. Sie können dies mithilfe verschiedener Eigenschaften der WMI-Prozessklasse ändern .

Squillman
quelle
Mein Fehler. Ich war nicht klar genug. Frage bearbeitet ...
Andrew J. Brehm
1

Ein Liner, um den Namen Ihres Prozesses mit der höchsten Speichernutzung zu finden

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