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         211025920

Yukarı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                   307

Yukarı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         325996544

Yukarı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)}}
 $processMemoryUsage
Output

Memory usage in Percentage: 77.2521027641826

ProcessName        Mem Usage(MB)
-----------        -------------
Memory Compression          1105
chrome.exe                   358
firefox.exe                  318
chrome.exe                   302
firefox.exe                  290

Yukarı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.

İlgili makaleler