Użyj programu Powershell, aby dowiedzieć się, co zużywa dużo pamięci (w 64-bitowym systemie Windows)

9

Jak dowiedzieć się (w Powershell), jaki proces / cokolwiek zużywa najwięcej pamięci?

Edycja: Próbuję dowiedzieć się, jak korzystać z programu Powershell, aby dowiedzieć się, z czego korzysta cała pamięć fizyczna na wypadek, gdyby Menedżer zadań itp. Nie wyjaśnił, dlaczego cała fizyczna pamięć RAM jest zużyta. Tzn. Muszę zidentyfikować pamięć używaną przez pamięci podręczne itp.

Andrew J. Brehm
źródło
O jakim rodzaju pamięci podręcznej myślisz?
squillman
Pamięć podręczna dysku ... Czy system Windows zwykle nie próbowałby wykorzystać całej dostępnej pamięci fizycznej do czegoś użytecznego?
Andrew J. Brehm

Odpowiedzi:

8

Oto sposób na uzyskanie informacji o aktualnie działających procesach i sortowanie według rozmiaru zestawu roboczego

Get-Process | Sort-Object -Descending WS

Przypisz to wyjście do zmiennej, a otrzymasz tablicę wyników, a następnie możesz po prostu zapisać pierwszy element tablicy (który w tym przypadku będzie obiektem System.Diagnostics.Process ).

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

Oto kolejny szybki i brudny skrypt, aby zrzucić kilka elementów danych z listy aktualnie działających procesów za pomocą dostawcy Win32_Process WMI:

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

To wyświetli PID (uchwyt), nazwę procesu i bieżący rozmiar zestawu roboczego. Możesz to zmienić, używając różnych właściwości klasy WMI Process .

squillman
źródło
Mój błąd. Nie byłem wystarczająco jasny. Pytanie edytowane ...
Andrew J. Brehm
1

Jedna linijka, aby znaleźć nazwę twojego najwyższego procesu wykorzystania pamięci

Get-Process | Sort-Object -Descending WS | select -first 1 | select -ExpandProperty ProcessName
Eric
źródło
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
źródło