PowerShell - Bellek Kullanımını Al
Çoğu zaman PowerShell yöneticilerinin, ağdaki bir sunucunun performans sorununu görmek için sunucuları manuel olarak taraması gerekir. Sunuculardan birinin yanıt vermemesi veya yanıt vermemesi, bağımlı sunucularda performans sorunlarına neden olması mümkün olabilir. Bu tür bir senaryoda, sunucular için bilgi belleği kullanımına sahip olmak, hangi sunucunun daha yüksek bellek kullanımına sahip olduğunu belirlemeye yardımcı olacaktır.
Bilgisayardaki bellek kullanımını almak için PowerShell Get-WMIObject'i kullanma. PowerShell'de yerel bilgisayarda veya uzak bilgisayarda bellek kullanımını elde etmenin birden çok yolu vardır.
Bu yazımda PowerShell kullanan sunucular için bellek kullanımının nasıl alınacağını anlatacağım.
PowerShell Bellek Kullanımı Alma
PowerShell kullanan yerel bir bilgisayardaki ilk 10 işlem için bellek kullanımını öğrenmek için aşağıdaki komutu kullanın
PS D:\PowerShell> Get-WmiObject WIN32_PROCESS | Sort-Object -Property ws -Descending | Select-Object -first 10 ProcessID,Name,WS
ProcessID Name WS
--------- ---- --
2628 Memory Compression 909996032
11984 chrome.exe 470863872
15728 firefox.exe 356192256
14444 chrome.exe 332091392
16680 firefox.exe 315645952
11812 chrome.exe 311554048
22072 Teams.exe 242507776
11256 firefox.exe 221163520
27052 powershell_ise.exe 213434368
25612 chrome.exe 211025920Yukarıdaki PowerShell betiğinde,
- Get-WMIObject cmdlet'ini ve WIN32_Process sınıfını kullanarak yerel bilgisayardaki tüm işlemler hakkında bilgi alır.
- Tüm işlemleri WS'ye göre azalan şekilde sıralayın
- İlk 10 işlem kimliğini, işlem adını ve WS'yi almak için Select-Object'i kullanma
- İlk 10 işlemin bellek kullanımını alır
Yukarıdaki bilgilerden de görebileceğiniz gibi, hangi işlemlerin daha fazla bellek kullanımına sahip olduğu hakkında fikir sahibi oluyoruz ancak bu işlemlerin yüzde olarak ne kadar bellek kullanımı kullanacağını bilmek çok zordur.
Harika İpucu: VM'nin bellek kullanımını ölçmek için bir kaynak havuzu nasıl oluşturulur?
Bilgisayardaki yüzde cinsinden toplam bellek kullanımını elde etmek için, sistemde ne kadar TotalVisibleMemorySize ve FreePhysicalMemory bulunduğunu bilmemiz gerekir.
Yerel bilgisayardaki işlem belleği kullanımını MB cinsinden almak için aşağıdaki komutu çalıştırın
# Get Computer Object
$CompObject = Get-WmiObject -Class WIN32_OperatingSystem
$Memory = ((($CompObject.TotalVisibleMemorySize - $CompObject.FreePhysicalMemory)*100)/ $CompObject.TotalVisibleMemorySize)
Write-Host "Memory usage in Percentage:" $Memory
# Top 5 process Memory Usage (MB)
$processMemoryUsage = Get-WmiObject WIN32_PROCESS | Sort-Object -Property ws -Descending | Select-Object -first 5 processname, @{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}}
$processMemoryUsage
Output:
Memory usage in Percentage: 78.134547088066
ProcessName Mem Usage(MB)
----------- -------------
Memory Compression 1032
chrome.exe 373
Teams.exe 370
firefox.exe 315
chrome.exe 307Yukarıdaki PowerShell betiğinde,
- Get-WmiObject -Class Win32_OperatingSystem kullanarak yerel bilgisayar nesnesini alın
- TotalVisibleMemorySize ve FreePhysicalMemory hakkında bilgi alın
- Bellek kullanımını yüzde olarak hesaplayın ve alın
- Win_32_Process'i kullanmak tüm süreci alır, azalan ws'ye göre sıralar
- İlk 5 işlem belleği kullanımını elde etmek için Select-Object'i kullanma
- Hangi işlemin daha yüksek bellek kullanımına sahip olduğunu okumak ve yorumlamak kolaydır.
Harika İpucu: PowerShell'de çok satırlı komut nasıl kullanılır?
PowerShell Uzak Bilgisayarda Bellek Kullanımını Alma
PowerShell kullanan uzak bir bilgisayardaki ilk 10 işlem için bellek kullanımını öğrenmek için aşağıdaki komutu kullanın
PS D:\PowerShell> Get-WmiObject WIN32_PROCESS -ComputerName 'corp-in-18' | Sort-Object -Property ws -Descending | Select-Object -first 5 ProcessID,Name,WS
>>
ProcessID Name WS
--------- ---- --
12628 Memory Compression 913199104
10522 chrome.exe 438820864
17292 Outlook.exe 393461760
26529 firefox.exe 354979840
23133 chrome.exe 325996544Yukarıdaki PowerShell betiğinde,
- Get-WMIObject cmdlet'ini ve WIN32_Process sınıfını kullanarak -
ComputerNameözelliği tarafından belirtilen uzak hesaplama adındaki tüm işlemler hakkında bilgi alır - Tüm işlemleri WS'ye göre azalan şekilde sıralayın
- İlk 5 işlem kimliğini, işlem adını ve WS'yi almak için
Select-Object'i kullanma - İlk 5 işlemin bellek kullanımını elde eder
Uzak bir bilgisayardaki toplam bellek kullanımını yüzde olarak almak için sistemde TotalVisibleMemorySize ve FreePhysicalMemory'yi edinin.
Uzak bilgisayardaki mb cinsinden işlem belleği kullanımını almak için aşağıdaki komutu çalıştırın
$CompName = 'corp-in-18'
# Get Computer Object
$CompObject = Get-WmiObject -Class WIN32_OperatingSystem -ComputerName $CompName
$Memory = ((($CompObject.TotalVisibleMemorySize - $CompObject.FreePhysicalMemory)*100)/ $CompObject.TotalVisibleMemorySize)
Write-Host "Memory usage in Percentage:" $Memory
# Top 5 process Memory Usage (MB)
$processMemoryUsage = Get-WmiObject WIN32_PROCESS -ComputerName $CompName | Sort-Object -Property ws -Descending | Select-Object -first 5 processname, @{Name="Mem Usage(MB)";Expression={[math]::round($_.ws / 1mb)}}
$processMemoryUsageOutput
Memory usage in Percentage: 77.2521027641826
ProcessName Mem Usage(MB)
----------- -------------
Memory Compression 1105
chrome.exe 358
firefox.exe 318
chrome.exe 302
firefox.exe 290Yukarıdaki PowerShell betiğinde,
- Get-WmiObject cmdlet'ini kullanarak
BilgisayarAdıtarafından belirtilen uzak bilgisayar nesnesini alın - TotalVisibleMemorySize ve FreePhysicalMemory hakkında bilgi alın
- Bellek kullanımını yüzde olarak hesaplayın ve alın
- Win_32_Process'i kullanmak uzak bilgisayardaki tüm işlemleri alır, ws'ye göre azalan şekilde sıralar
- İlk 5 işlem belleği kullanımını elde etmek için Select-Object'i kullanma
Harika İpucu: PowerShell'de dizeye veya değişkene yeni satır nasıl eklenir?
Çözüm
PowerShell betiğini kullanarak yerel bilgisayarda veya uzak bilgisayarda bellek kullanımını almaya yönelik yukarıdaki makalenin, bellek kullanımı bilgilerini almanıza ve bu konuda harekete geçmenize yardımcı olacağını umuyorum.
Win32_Process sınıfını kullanarak, ComputerName tarafından belirtilen bilgisayardaki mevcut tüm işlemleri döndürür.
PowerShell Active Directory komutları ve PowerShell temelleri hakkında daha fazla konuyu ShellGeek ana sayfasında bulabilirsiniz.
