CPU 사용률 및 메모리 사용량을 표시하는 Windows PowerShell


1

답변을 사용할 수 있습니다. CPU 비율 .

While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}

이제 컴퓨터의 작업에 대해 메모리 사용량과 CPU 백분율을 동시에 표시 할 수있는 문제가 있습니다. 알아 Get-Counter "\Process(*)\Working Set - Private" 메모리를 얻지 만 ID는 태스크, CPU % 및 메모리 사용량을 동시에 표시합니다.

업데이트 1 : 이상적으로 나는 이것을 powershell에서 명령 집합으로 실행할 수 있기를 원합니다. 출력을 다음과 같이 표시하고 싶습니다.

Process Name CPU (%) Memory (MB) ------------ ------- -----------

PowerShell에서 세 항목을 표시 할 수있게 된 후에 처리 할 수있는 항목이 있으면 표시됩니다.

업데이트 2 : 이 코드 섹션은 내가 원하는 것을 제공합니다.

while (1) {cls; Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | select-object -property Name, PercentProcessorTime, IDProcess, @{"Name" = "WSP(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}} | ? {$_.Name -notmatch "^(idle|_total|system)$"} | Sort-Object -Property PercentProcessorTime -Descending| ft -AutoSize | Select-Object -First 15; start-sleep 5}

결과는 다음과 같습니다.

Name PercentProcessorTime IDProcess WSP(MB) ---- -------------------- --------- ------- MicrosoftEdgeCP#3 6 18972 6 WmiPrvSE#3 6 27300 7 svchost#22 0 7316 1

이면의 단점은 정보를 한 번 표시 한 후에 실패하고 이유를 알 수 없다는 것입니다. 어떤 도움이 필요합니까?

업데이트 : 3

$cores = (Get-WmiObject Win32_Processor).NumberOfLogicalProcessors while ($true) { $tmp = Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | select-object -property Name, @{Name = "CPU"; Expression = {($_.PercentProcessorTime/$cores)}}, @{Name = "PID"; Expression = {$_.IDProcess}}, @{"Name" = "Memory(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}} | Where-Object {$_.Name -notmatch "^(idle|_total|system)$"} | Sort-Object -Property CPU -Descending| Select-Object -First 15; cls; $tmp | Format-Table -Autosize -Property Name, CPU, PID, "Memory(MB)"; Start-Sleep 5 }

내가 필요로하는 모든 것을 성취하고 앞으로 나올 수있는 출발점을 제공합니다. 내가 테이블 포매터와 관련한 문제는 format-table 마지막이어야합니다.


"동시에 표시됨"... 명령 프롬프트에서? GUI에서? 퍼퓸 에서요? 자세한 내용을 제공해주십시오. 코드는 어떻게 생겼습니까? CPU 사용량을 어떻게 표시합니까? 최종 목표는 어떻게 생겼습니까?
EBGreen

@EBGreen 업데이트를 참조하십시오. 나는 충분한 세부 사항을 추가했으면 좋겠다. Powershell을 처음 사용하므로 질문에 도움이됩니다.
Keith Bux

1
그래서 지금까지 어떤 코드를 작성 했습니까?
EBGreen

@EBGreen 내 코드는 포함 된 링크의 코드와 비슷합니다. 나는 출력에 다른 필드를 추가하기 시작하려는 위치조차 모른다. 그래서 제가 도움을 요청했습니다.
Keith Bux

당신은 단지 Get-Counter "\Process(*)\Working Set - Private"? 그것은 실제로 코드를 작성하는 것으로 간주되지 않기 때문입니다. 그러나 그것이 당신이 가진 전부라면 그것이 당신이 가진 전부입니다.
EBGreen

답변:


0

WMI를 통해 성능 카운터를 쿼리 할 수있는 또 다른 방법이 있습니다. 출력에는 여러 인스턴스가있는 프로세스를 추적 할 때 유용한 프로세스 ID도 포함됩니다. 또한 "계산 된 속성"을 사용합니다. select-object 작업 설정 값을 바이트에서 메가 바이트로 변환합니다. 또한 4 코어 시스템의 최대 CPU는 100이 아닌 400입니다. 따라서 전체 프로세스 (즉, 최대 100)를 얻으려면 각 프로세스의 CPU 값을 코어 수로 나누어야합니다.

$cores = (Get-WmiObject Win32_Processor).NumberOfLogicalProcessors
while ($true) {
    Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | 
    Where-Object {$_.Name -notmatch "^(idle|_total|system)$" -and $_.PercentProcessorTime -gt 0} |
    Format-Table -Autosize -Property @{Name = "CPU"; Expression = {[int]($_.PercentProcessorTime/$cores)}}, Name, @{Name = "PID"; Expression = {$_.IDProcess}}, @{"Name" = "WSP(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}}
    Start-Sleep 5
}

CPU Name            PID WSP(MB)
--- ----      --------- -------
  1 chrome        12476      64
  2 wuauclt        7504       0
  3 SearchIndexer 10128      22
  4 TIworker      11380     102

나는 당신이 제공 한 코드를 시도했다. 와 더불어 get-date 현재의 시간에 모두 표시됩니다. 해당 섹션을 제거하면 프롬프트 나 정보가 표시되지 않습니다.
Keith Bux

0

while (1) {cls; Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | select-object -property Name, PercentProcessorTime, IDProcess, @{"Name" = "WSP(MB)"; Expression = {[int]($_.WorkingSetPrivate/1mb)}} | ? {$_.Name -notmatch "^(idle|_total|system)$"} | Sort-Object -Property PercentProcessorTime -Descending| Select-Object -First 15 | ft Name, PercentProcessorTime, IDProcess, "WSP(MB)" -AutoSize; start-sleep 5}

이것이 제가 찾고 있던 것입니다. 멋진 출발점에 대해 @ 클레이튼에게 감사드립니다. 다음은 각 부분의 역할에 대한 설명입니다.

while(1) = & gt; 항상 달리다.

cls = & gt; 현재 화면 지우기

Get-WmiObject = & gt; 모든 현재 프로세스 정보를 얻는 데 사용됩니다.

select-object = & gt; 원하는 데이터 열만 선택하십시오.

? {$_.Name -notmatch "^(idle|_total|system)$"} = & gt; 프로세스 이름의 전 (前) 부분에 유휴, _ 합계 또는 시스템이있는 프로세스 이름을 제거하십시오.

Sort-Object = & gt; 내림차순으로 CPU 사용량별로 프로세스 정렬

Select-Object = & gt; 처음 15 개 항목 만 선택 (상위 15 개 CPU 프로세스)

ft = & gt; 열 제목을 사용하여 표 형식을 지정하고 전체 화면 사용

start-sleep = & gt; 루프를 약 5 초마다 실행하도록 잠자다.


멀티 코어 시스템에서 CPU 사용률을 올바르게보고하는 방법에 대한 업데이트 된 답변보기 ...
Clayton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.