PowerShell commands to get top 10 processes for CPU or Memory

It is very convenient when you can get top 10 processes which are using high CPU or Memory. Especially when you are not able to login to server with RDP or don't want to RDP just to check CPU or Memory usage.

For example, you have server running on AWS and you want to know Top 10 processes which are consuming more CPU or Memory. You have option to connect the server via console CLI, where you can quickly check instead of login to server via RDP. Another example is when you have high Memory or CPU usage on the server that sometime couldn't connect your RDP session, in that case, you can login to any computer in the network which has network connectivity with the server and check CPU or Memory usage remotely with PS-Session option.

Following is the command which can get Top 10 processes consuming more CPU:


Get-Counter -ErrorAction SilentlyContinue '\Process(*)\% Processor Time' | Select-Object -ExpandProperty countersamples| Select-Object -Property instancename, cookedvalue| ? {$_.instanceName -notmatch "^(idle|_total|system)$"} | Sort-Object -Property cookedvalue -Descending| Select-Object -First 10| ft InstanceName,@{L='CPU';E={($_.Cookedvalue/100/$env:NUMBER_OF_PROCESSORS).toString('P')}} -AutoSize


Following is the command which can get Top 10 processes consuming more Memory:


get-process | Group-Object -Property ProcessName | 
% {
    [PSCustomObject]@{
        ProcessName = $_.Name
        Mem_MB = [math]::Round(($_.Group|Measure-Object WorkingSet64 -Sum).Sum / 1MB, 0)
        ProcessCount = $_.Count
    }
} | sort -desc Mem_MB | Select-Object -First 10

I hope this is been informative to you. Thank you.

Comments