ใช้ Powershell เพื่อค้นหาสิ่งที่ใช้หน่วยความจำมากมาย (บน Windows 64 บิต)


9

ฉันจะทราบได้อย่างไร (ใน Powershell) กระบวนการใด / ใช้หน่วยความจำมากที่สุด?

แก้ไข: ฉันกำลังพยายามหาวิธีใช้ Powershell เพื่อค้นหาสิ่งที่ใช้หน่วยความจำทางกายภาพทั้งหมดในกรณีที่ Task Manager ฯลฯ ล้มเหลวในการอธิบายสาเหตุที่ RAM ทางกายภาพทั้งหมดหมดลง คือฉันต้องระบุหน่วยความจำที่แคชใช้เป็นต้น


คุณคิดว่าแคชชนิดใด?
squillman

แคชของดิสก์ ... โดยปกติ Windows จะไม่พยายามใช้หน่วยความจำกายภาพที่มีอยู่ทั้งหมดเพื่อสิ่งที่มีประโยชน์หรือไม่
Andrew J. Brehm

คำตอบ:


8

ต่อไปนี้เป็นวิธีรับข้อมูลเกี่ยวกับกระบวนการที่กำลังทำงานอยู่และเรียงลำดับตามขนาดชุดการทำงาน

Get-Process | Sort-Object -Descending WS

กำหนดผลลัพธ์นั้นให้กับตัวแปรและจะให้อาเรย์ของผลลัพธ์จากนั้นคุณสามารถเขียนสมาชิกแรกของอาร์เรย์ (ซึ่งในกรณีนี้จะเป็นวัตถุSystem.Diagnostics.Process )

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

นี่เป็นอีกสคริปต์ที่รวดเร็วและสกปรกในการถ่ายโอนข้อมูลบางรายการจากรายการกระบวนการที่กำลังทำงานอยู่โดยใช้ผู้ให้บริการ Win32_Process ของ WMI:

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

นั่นจะแสดงรายการ PID (ตัวจับ) ชื่อกระบวนการและขนาดชุดการทำงานปัจจุบัน คุณสามารถเปลี่ยนที่ใช้คุณสมบัติที่แตกต่างกันของกระบวนการคลา WMI


ความผิดฉันเอง. ฉันยังไม่ชัดเจนพอ แก้ไขคำถามแล้ว ...
Andrew J. Brehm

1

หนึ่งซับเพื่อค้นหาชื่อของกระบวนการใช้หน่วยความจำสูงสุดของคุณ

Get-Process | Sort-Object -Descending WS | select -first 1 | select -ExpandProperty ProcessName

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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.