Gunakan Powershell untuk mencari tahu apa yang menggunakan banyak memori (pada Windows 64 bit)

9

Bagaimana cara mengetahui (dalam Powershell) proses apa / apa pun yang menggunakan sebagian besar memori?

Sunting: Saya mencoba mencari cara untuk menggunakan Powershell untuk mencari tahu apa yang menggunakan semua memori fisik dalam kasus Task Manager dll gagal menjelaskan mengapa semua RAM fisik digunakan. Yaitu saya perlu mengidentifikasi memori yang digunakan oleh cache dll.

Andrew J. Brehm
sumber
Jenis cache apa yang Anda pikirkan?
squillman
Cache disk ... Bukankah Windows biasanya mencoba menggunakan semua memori fisik yang tersedia untuk sesuatu yang bermanfaat?
Andrew J. Brehm

Jawaban:

8

Berikut adalah cara untuk mendapatkan info tentang proses yang sedang berjalan dan mengurutkan berdasarkan Ukuran Set Kerja

Get-Process | Sort-Object -Descending WS

Tetapkan output itu ke variabel dan itu akan memberi Anda array hasil, maka Anda bisa menuliskan anggota pertama array (yang dalam hal ini akan menjadi objek System.Diagnostics.Process objek).

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

Berikut ini skrip cepat dan kotor lainnya untuk membuang beberapa item data dari daftar proses yang sedang berjalan menggunakan penyedia Win32_Process WMI:

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

Itu akan mencantumkan PID (pegangan), nama proses dan ukuran set kerja saat ini. Anda bisa mengubahnya menggunakan properti berbeda dari kelas Proses WMI .

squillman
sumber
Salahku. Saya tidak cukup jelas. Pertanyaan diedit ...
Andrew J. Brehm
1

Satu liner untuk menemukan nama proses penggunaan memori tertinggi Anda

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