본문 바로가기
Windows/PowerShell

PowerShell | 특정 프로세스 마다 CPU, 메모리 사용량 구하기

by 지혜를 탐구하는 오딘 2022. 6. 23.
728x90
반응형

 

1. 프로세스 마다 CPU, 메모리 사용량 보기

'작업 관리자'에서 프로세스 마다 CPU, 메모리 사용량을 볼 수 있다.
또, "Details", "세부정보"를 보면 더욱 자세한 프로세스 사용량과 메모리 사용량을 볼 수 있다.


'작업 관리자'에서 프로세스 별로 CPU, 메모리 사용률, 사용량을 확인하였다.

 

2. PowerShell 에서 프로세스 마다 CPU, 메모리 사용량 보기

CPU 사용량을 알고 싶다면,

(Get-Counter -ComputerName hostname -Counter "\Process(*)\% Processor Time").CounterSamples


메모리 사용량을 알고 싶다면,

Get-Process -ComputerName hostname



특정한 프로세스의 CPU, 메모리 사용량을 한 번에 알고 싶다면, 아래 코드를 사용하자.

Function Print-CPU_Memory_Usage_of_Specific_Processes
{
    param (
     [Array] $process_name_list     # 프로세스 이름 배열만 들어와야 한다.
    )
    process {
    	$hostname = hostname
        # 프로세스 정보 출력
        "----------------------------------------"
        for($i = 0 ; $i -lt $process_name_list.Count ; $i++)
        {
            # 프로세스 별 CPU 사용량
            $Procs = (Get-Counter -ComputerName $hostname -Counter "\Process(*)\% Processor Time").CounterSamples
            $cpu_of_process = $Procs | 
                Where-Object {$_.InstanceName -eq $($process_name_list[$i])} |
                Select-Object -Property InstanceName, CookedValue
            
            # 프로세스 별 메모리 사용량
            $memory_of_process = Get-Process -ComputerName $hostname -Name $($process_name_list[$i]) |
            	Select-Object -Property Name, WorkingSet64
            
            # 정보 출력
            Write-Host "$($i+1) Process Name :`t $($process_name_list[$i])"
            Write-Host "`tCPU Usage :`t $($cpu_of_process.CookedValue) %"
            Write-Host "`tCPU Usage :`t $([Math]::Round(($cpu_of_process.CookedValue), 1)) %"
            Write-Host "`tMemory Usage (Byte) :`t $($memory_of_process.WorkingSet64) Byte"
            Write-Host "`tMemory Usage (KB) :`t $([Math]::Round(($memory_of_process.WorkingSet64 / 1kb), 1)) KB"
            Write-Host "`tMemory Usage (MB) :`t $([Math]::Round(($memory_of_process.WorkingSet64 / 1mb), 1)) MB"
            Write-Host "`tMemory Usage (GB) :`t $([Math]::Round(($memory_of_process.WorkingSet64 / 1gb), 1)) GB"
            "----------------------------------------------"
    
        }
        "----------------------------------------------"
    }
}

 

실행 결과





(참고 자료)
Get-Counter (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.diagnostics/get-counter?view=powershell-7.2)
Get-Process (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-process?view=powershell-7.2)
Querying performance counters from PowerShell (https://powershellmagazine.com/2013/07/19/querying-performance-counters-from-powershell/)

728x90
반응형

댓글