PowerShell'de Bellek Kullanım Yüzdesini Alma [3 Yol]


Bellek kullanım yüzdelerini almak için birden fazla kullanım durumumuz olabilir. Örneğin:

  • Genel bellek kullanım yüzdesini alma
  • Genel bellek kullanım yüzdesi geçmişini alma
  • Bir/tüm işlemler için bellek kullanım yüzdesini alma

Bunları birer birer öğrenelim.

Overcall Belleği Kullanım Yüzdesi

Genel bellek kullanım yüzdesini almak için Get-Counter ve Get-WmiObject cmdlet'lerini kullanabiliriz. Bunları aşağıda ayrıntılı olarak inceleyelim.

Get-Counter Cmdlet'ini kullanın

Toplam bellek kullanımını yüzde cinsinden öğrenmek için Get-Counter cmdlet'ini kullanın.

Get-Counter Cmdlet'ini kullanın:

$performance_counter = Get-Counter '\Memory\% Committed Bytes In Use'
$usedMemoryPercentage = $performance_counter.CounterSamples[0].CookedValue
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

ÇIKTI:

Used Memory Percentage: 57.7237514214878%

Sistemde kullanılan bellek baytlarının yüzdesine ilişkin performans sayacını almak için Get-Counter cmdlet'ini kullandık ve bunu $Performance_counter değişkeninde sakladık. '\Memory\% Kullanımdaki Kaydedilen Bayt Sayısı' sayaç yolu, kullanılabilir toplam fiziksel belleğe kıyasla taahhüt edilen bellek baytlarının oranını ölçen bellek sayacını belirtti.

Daha sonra performans sayacının değerini $Performance_counter'dan aldık ve bunu $usedMemoryPercentage değişkenine atadık. Peki performans sayacının değerini nasıl elde ettik? Bunun için, bir dizi performans sayacı örneği içeren $Performance_counter değişkeninin CounterSamples özelliğini kullandık.

İlk sayaç örneğini almayı amaçladığımız için ona erişmek için [0] kullandık. Daha sonra sayaç örneğinin CookedValue özelliğini kullanarak mesaj kullanım yüzdesini elde ettik. Son olarak PowerShell konsolunda görüntülemek için Write-Host'u kullandık.

Get-WmiObject Cmdlet'ini kullanın

PowerShell sürüm 3.0 veya önceki bir sürümünü kullanıyorsanız bellek kullanım yüzdesini almak için Get-WmiObject cmdlet'ini kullanın.

Get-WmiObject cmdlet'ini kullanın:

$usedMemory = Get-WmiObject -Class Win32_OperatingSystem
$totalMemory = $usedMemory.TotalVisibleMemorySize
$freeMemory = $usedMemory.FreePhysicalMemory
$usedMemoryPercentage = ($totalMemory - $freeMemory) / $totalMemory * 100
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

ÇIKTI:

Used Memory Percentage: 54.8795984097428%

İşletim sistemiyle ilgili ayrıntılara ulaşmak için Get-WmiObject cmdlet'ini, özellikle de -Class parametresini kullanarak belirttiğimiz Win32_OperatingSystem'i kullandık. Alınan ayrıntıları $usedMemory değişkeninde sakladık.

Daha sonra, görünür bellek boyutunu ve boş fiziksel belleği elde etmek için sırasıyla $usedMemory değişkeninin TotalVisibleMemorySize ve FreePhysicalMemory özelliklerini kullandık. Bunları $totalMemory ve $freeMemory adlı iki ayrı değişkende sakladık.

Daha sonra, $freeMemory miktarını $totalMemory'den çıkararak ve çıktıyı $totalMemory, ardından bunu 100 ile çarpıyoruz. Son olarak, hesaplanan bu yüzdeyi $usedMemoryPercentage değişkeninde sakladık ve bunu ayrıca PowerShell konsolunda yazdırmak için Write-Host cmdlet'iyle birlikte kullandık.

PowerShell sürüm 3.0 veya üzerini kullanıyorsanız Get-CimInstance cmdlet'ini kullanmayı tercih edin çünkü PowerShell 3.0'dan bu yana Get-WmiObject'in yerini Get-CimInstance almıştır. güçlü>

Get-CimInstance cmdlet'ini kullanın:

$usedMemory = Get-CimInstance -Class Win32_OperatingSystem
$totalMemory = $usedMemory.TotalVisibleMemorySize
$freeMemory = $usedMemory.FreePhysicalMemory
$usedMemoryPercentage = ($totalMemory - $freeMemory) / $totalMemory * 100
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

ÇIKTI:

Used Memory Percentage: 54.8795984097428%

Şu ana kadar genel bellek kullanım yüzdesini nasıl elde edeceğimizi öğrendik; Peki ya makinenizdeki mevcut işlem tarafından yalnızca ne kadar bellek yüzdesinin tüketildiğini bilmek istiyorsanız? Bunu nasıl yapabileceğimize bakalım.

Overcall Belleği Kullanım Yüzdesi Geçmişi

Genel bellek kullanım yüzdesi geçmişini almak için Get-Counter cmdlet'ini kullanın.

Get-Counter Cmdlet'ini kullanın:

Get-Counter '\Memory\% Committed Bytes In Use' -Continuous -SampleInterval 5

ÇIKTI:

Timestamp                  CounterSamples
---------                  --------------
7/15/2023 11:38:12 AM      \\desktop-nkk10jm\memory\% committed bytes in use :
                           57.3812244593588

7/15/2023 11:38:17 AM      \\desktop-nkk10jm\memory\% committed bytes in use :
                           57.3770478035736

7/15/2023 11:38:22 AM      \\desktop-nkk10jm\memory\% committed bytes in use :
                           57.3751683014853

7/15/2023 11:38:27 AM      \\desktop-nkk10jm\memory\% committed bytes in use :
                           57.3706575337263

İlk örnek kodda Get-Counter cmdlet'ini ve sayaç yolunu zaten öğrenmiştik. Burada, 5< örnek aralığıyla, kullanımdaki taahhütlü bellek baytlarının yüzdesine ilişkin performans sayacı verilerini almak için -SampleInterval parametresini 5 olarak ayarladık. /code> saniye. Ancak kullanıcı bunu durdurmak için klavyeden Ctrl+C tuşuna basana kadar verileri sürekli güncellemek için -Continous parametresi kullanıldı.

Bir/Daha Fazla İşlem için Bellek Kullanım Yüzdesi

Bir işlemin veya tüm işlemlerin bellek kullanım yüzdesini bulmak için Get-Process ve Get-WmiObject cmdlet'lerini kullanabiliriz.

Get-Process Cmdlet'ini kullanın

Yerel makinedeki geçerli işlemin bellek kullanım yüzdesini almak için Get-Process cmdlet'ini kullanın.

Get-Process Cmdlet'i kullanın:

$current_process = Get-Process -Id $PID
$usedMemoryPercentage = ($current_process.WorkingSet / (Get-WmiObject -Class Win32_ComputerSystem).TotalPhysicalMemory) * 100
Write-Host "Used Memory Percentage: $usedMemoryPercentage%"

ÇIKTI:

Used Memory Percentage: 0.918036721468859%

Mevcut süreç hakkında bilgi almak için Get-Process cmdlet'ini -Id parametresiyle kullandık. Geçerli PowerShell işleminin işlem kimliğini (diğer adıyla PID) içeren $PID değişkenini kullanarak geçerli işlemi belirttik.

-Id'i $PID ile ayarlayarak, $current_process değişkenine atadığımız mevcut PowerShell oturumuna ilişkin işlem ayrıntılarını elde ettik.

Daha sonra bellek kullanım yüzdesini hesapladık ve bunu konsolda görüntülemek için Write-Host ile kullanılan $usedMemoryPercentage değişkenine atadık. Peki bellek kullanım yüzdesini nasıl hesapladık?

Bunun için $current_process nesnesinin WorkingSet özelliğini (işlemin kullandığı bellek miktarını içeriyordu) TotalPhysicalMemory özelliğine böldük. Win32_ComputerSystem WMI sınıfının (bilgisayarda yüklü toplam fiziksel bellek miktarını içeren) ve ardından sonucun 100 ile çarpılması.

Bu şekilde yukarıdaki kod, mevcut işlemin işlem nesnesini aldı, bu işlemin bellek kullanım yüzdesini hesapladı ve ardından çıktıyı PowerShell konsolunda görüntüledi.

Get-WmiObject Cmdlet'ini kullanın

Yerel makinedeki tüm işlemlere ilişkin bellek kullanım yüzdesini almak için Get-WmiObject cmdlet'ini kullanın.

Get-WmiObject Cmdlet'ini kullanın:

Get-WmiObject -Class Win32_PerfFormattedData_PerfProc_Process |
Select-Object Name, IDProcess, 
@{Name="Memory Usage %";Expression={($_.WorkingSetPrivate / (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory) * 100}}

ÇIKTI:

Name                           IDProcess       Memory Usage %
----                           ---------       --------------
ApplicationFrameHost                8556   0.0132102058275879
CalculatorApp                      15368  0.00387112258683896
CompPkgSrv                         14692  0.00532279355690357
CxMonSvc                            3224   0.0582120058995908
CxUtilSvc                           3248  0.00503245936289065
Greenshot                          10684   0.0124359813102202
HPHotkeyNotification               15640  0.00832291356170376
HotKeyServiceUWP                    3740    0.011323033566504
HxAccounts                         10436   0.0434533510372673
HxOutlook                            480 0.000435501291019383
HxTsr                               5836   0.0515343194372936
Idle                                   0 9.67780646709739E-05
IntelCpHDCPSvc                      1264                    0
IntelCpHeciSvc                      1384  0.00508084839522613
LanWlanWwanSwitchingServiceUWP      3104   0.0180007200288012
Locator                             3504                    0
Memory Compression                  1888     3.33555277694979
MicTray64                           2348  0.00479051420121321
...                                 ...   ...
...                                 ...   ...
...                                 ...   ...

Yukarıdaki kod, makinede o anda çalışan işlemler hakkında bilgi aldı ve her işlemin bellek kullanım yüzdesini hesapladı. Nasıl?

İlk olarak makinede çalışan tüm proseslerin performans sayacı tarihini almak için Win32_PerfFormattedData_PerfProc_Process sınıfı ile Get-WmiObject cmdlet'ini kullandık. Win32_PerfFormattedData_PerfProc_Process sınıfını belirtmek için -Class parametresini kullandığımızı unutmayın; ancak bu parametreyi de atlayabiliriz.

Daha sonra, Get-WmiObject tarafından üretilen çıktıyı Select-Object cmdlet'ine aktararak Ad, IDProcess'i seçtik. ve karşılık gelen bellek kullanım yüzdesi. İşlemin özel çalışma kümesini bilgisayarın toplam fiziksel belleğine bölüp ardından 100 ile çarparak bellek yüzdesini hesapladık.

Bellek Kullanımı % adında hesaplanmış bir özellik oluşturmak için HashTable kullandığımızı unutmayın.

Hepsi PowerShell'de bellek kullanım yüzdesinin nasıl alınacağıyla ilgili.

İlgili makaleler