프로세스 당 CPU 및 메모리 사용량 추적


163

내 응용 프로그램 중 하나가 원하는 것보다 더 많은 CPU 사이클을 먹는 것으로 보입니다. 문제는-버스트에서 발생하며 작업 관리자를 보는 것만으로도 즉각적인 사용법 만 보여 주므로 도움이되지 않습니다.

일부 프로세스의 CPU 및 메모리 사용 기록을 추적하는 방법이 있습니까 (Windows). 예를 들어 "firefox"추적을 시작하고 한 시간 정도 지나면 해당 시간 동안의 CPU 및 메모리 사용량 그래프가 표시됩니다.

기성품 도구 또는 이것을 달성하기위한 프로그래밍 방식을 찾고 있습니다.

답변:


167

그냥 유형 perfmonStart > Run 입력하고 Enter 키를 누릅니다. 성능 창이 열리면 + 부호를 클릭하여 그래프에 새 카운터를 추가하십시오. 카운터는 PC 작동 방식의 여러 측면이며 유사성에 따라 "성능 개체"라는 그룹으로 그룹화됩니다.

질문에 대해서는 "프로세스", "메모리"및 "프로세서"성능 개체를 선택할 수 있습니다. 그런 다음이 카운터를 실시간으로 볼 수 있습니다

나중에 검사를 위해 성능 데이터를 저장하도록 유틸리티를 지정할 수도 있습니다. 이렇게하려면 왼쪽 패널에서 "성능 로그 및 경고"를 선택하십시오. 위에서 언급 한 카운터를 제공하는 시스템 모니터 콘솔 바로 아래에 있습니다.없는 경우 "파일"> "스냅인 추가 / 제거"를 클릭하고 추가를 클릭 한 후 목록에서 "성능 로그 및 경고"를 선택하십시오. ".)"성능 로그 및 경고 "에서"카운터 로그 "아래에 새로운 모니터링 구성을 만든 다음 카운터를 추가하고 샘플링 속도, 로그 형식 (이진 또는 일반 텍스트) 및 로그 위치를 지정할 수 있습니다.


1
카운터 로그에서 데이터 샘플을 가져 오는 이상적인 간격은 얼마입니까?
Steph Rose

8
MS는 작성한 후에 UI를 PerformanceMonitor로 변경했습니다. Windows 2008 R2에서이 작업을 수행하는 방법을 알고 있습니까?
Martin Brown

5
@MartinBrown- 이것을 찾았 습니다 . 훌륭합니다.
JNF

2
누구나 비스타에 로그를 저장하는 두 번째 부분을 수행하는 방법을 알고 있습니까? "성능 로그 및 경고"는 어디에도없는 것 같습니다.
Xitcod13

11
데이터 콜렉터 세트-> 사용자 정의를 마우스 오른쪽 단추로 클릭하십시오. 새로 작성-> 데이터 콜렉터 세트를 선택하십시오. 이름을 지정하고 수동으로 작성을 선택하십시오. 다음을 클릭하십시오. 성능 카운터를 선택하십시오. 다음을 클릭하십시오. 성능 카운터를 추가하고 샘플 간격을 입력하십시오. 그런 다음 데이터 수집기 ​​집합에서 집합을 마우스 오른쪽 단추로 클릭하고 "시작"을 클릭하십시오. 잠시 후 세트를 마우스 오른쪽 버튼으로 클릭하고 "중지"를 클릭하십시오. 그런 다음 보고서-> 사용자 정의-> 설정에서 보고서를 찾을 수 있습니다. 그래프를 마우스 오른쪽 단추로 클릭하고 다른 이름으로 데이터 저장을 선택하십시오.
Gremio

43

프로세스 탐색기 는 프로세스 당 걸린 총 CPU 시간과 프로세스 당 히스토리 그래프를 표시 할 수 있습니다.


3
따라서 짧은 버스트에서 더 많은 메모리 또는 프로세서 성능을 무작위로 사용하는 프로세스를 찾는 데 어떻게 사용합니까? 좀 더 자세히 설명해 주시겠습니까?
Xitcod13

열 헤더를 마우스 오른쪽 단추로 클릭하고 열 선택을 선택한 다음 "프로세스 성능"
Laurent

0으로 재설정 할 수 있습니까?
Simon_Weaver

주어진 PID의 메모리 소비량을 파일에 로그인 할 수 있습니까?
Royi

다른 사용자를 지적하고 싶었습니다. 프로세스 탐색기가 열려 있어도 각 프로세스의 CPU 그래프는 처음으로 연 후에 만 ​​기록을 시작하므로 산발적 인 이벤트를 캡처하고 격리하려고 시도하는 데 사실상이 방법은 쓸모가 없습니다. 단일 프로세스로. 전역 시스템 CPU 그래프를 클릭하면 (프로세스 탐색기를 열 때 기록이 시작됨) 마우스를 아무 지점 에나 놓으면 해당 지점에서 CPU를 가장 많이 사용한 프로세스가 표시됩니다.
SUM1

19

perfmon.exe를 사용하여 메모리 사용을 추적하기 위해 "프로세스"카운터에서 "개인 바이트"카운터를 사용해 보았으며 제대로 작동합니다.


1
이것이 정답입니다. 프로세스에서 CPU 정보를 얻을 수도 있습니다. 프로세스를 클릭 한 다음 선택한 객체의 인스턴스에서 앱 (예 : Firefox)을 선택하십시오.
크리스 맥 코완

11

아마도 당신은 이것을 사용할 수 있습니다. 그것은 당신을 위해 작동하고 지정된 프로세스에 대한 프로세서 시간을보고합니다.

@echo off
: Rich Kreider <rjk@techish.net>
: report processor time for given process until process exits (could be expanded to use a PID to be more
: precise)
: Depends:  typeperf
: Usage:  foo.cmd <processname>

set process=%~1
echo Press CTRL-C To Stop...
:begin
for /f "tokens=2 delims=," %%c in ('typeperf "\Process(%process%)\%% Processor Time" -si 1 -sc 1 ^| find /V "\\"') do (
if %%~c==-1 (
goto :end
) else (
echo %%~c%%
goto begin
)
)

:end
echo Process seems to have terminated.

7

perfmon.exe를 사용하면 모니터링하려는 프로세스에 대한 카운터를 추가 할 수 있습니다 (오른쪽 패널을 마우스 오른쪽 버튼으로 클릭).

성능 개체 : 프로세스 "목록에서 인스턴스 선택"을 확인하고 firefox를 선택하십시오.


1
감사. 1 시간과 같이 미리 정의 된 시간 동안 CPU 사용량을 어떻게 확인할 수 있습니까?
Eli Bendersky

6

WMI는 Windows Management Instrumentation이며 모든 최신 버전의 Windows에 기본 제공됩니다. CPU 사용, 디스크 I / O 및 메모리 사용과 같은 것을 프로그래밍 방식으로 추적 할 수 있습니다.

Perfmon.exe는이 인터페이스의 GUI 프런트 엔드이며 프로세스를 모니터링하고 정보를 로그에 기록하며 사실 이후 로그를 분석 할 수 있습니다. 그것은 세계에서 가장 우아한 프로그램은 아니지만 일을 끝내줍니다.


5
기술적으로 perfmon은 기본 Windows 성능 카운터 API에 대한 인터페이스로, WMI보다 몇 년 앞서 있습니다. 또한 WMI는 네임 스페이스 내에 성능 카운터 API를 제공합니다.
Rob Walker

2

Process Lasso는 그래프가 아닌 프로세스 자동화 및 우선 순위 클래스 최적화를 위해 더 많이 설계되었습니다. 말했다, 그것은 않습니다 (그래프에 흰색 선으로 그려) 제공 프로세스 별 CPU 사용률의 역사를하지만 않습니다 하지 프로세스 당 메모리 사용 내역을 제공합니다.

면책 조항 : 나는 프로세스 올가미의 저자이지만 더 나은 해결책이 있기 때문에 실제로 그것을 보증하지는 않습니다 (perfmon이 최고입니다).

가장 좋은 것은 Windows Vista + 리소스 및 성능 모니터입니다. 시간이 지남에 따라 프로세스별로 CPU, 메모리, 네트워크 및 디스크 액세스 사용량을 추적 할 수 있습니다. 그것은 오래 전에 만들어 졌어 야하는 훌륭한 전체 시스템 정보 유틸리티입니다. 내가 실수하지 않으면 시간이 지남에 따라 프로세스 당 CPU 및 메모리 사용률을 추적 할 수 있습니다 (나머지 목록에있는 것 중에서).


2

C # / Perl / Java 스크립트를 사용하여 WMI 명령을 사용하여 사용률 데이터를 얻을 수도 있습니다. 아래는 그 단계입니다.

2 개의 WMI 선택 쿼리를 실행하고 CPU 사용률 공식을 적용해야합니다

1. 총 논리 프로세스 수를 검색하려면

select NumberOfLogicalProcessors from Win32_ComputerSystem

PercentProcessorTime의 값을 검색하려면 TimeStamp_Sys100NS (CPU 사용률 공식이 적용되어 실제 사용률을 얻음)와 WorkingSetPrivate (RAM)가 최소 2 회 (수면 간격 1 초)

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3. CPU 사용률 공식을 적용하십시오

CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors

p2는 두 번째로 검색된 PercentProcessorTime을 나타내고 p1은 처음으로 검색된 PercentProcessorTime을 나타냅니다. t2 및 t1은 TimeStamp_Sys100NS를위한 것입니다.

이에 대한 샘플 Perl 코드는 http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/ 링크에 있습니다 .

이 논리는 WMI 쿼리를 지원하는 모든 프로그래밍 언어에 적용됩니다


WMI와 Powershell?
PreguntonCojoneroCabrón

2

이것을 시도하지는 않았지만 ProcDump 는 더 나은 솔루션처럼 보입니다.

사이트 설명 :

ProcDump는 관리자 또는 개발자가 스파이크의 원인을 파악하는 데 사용할 수있는 스파이크 동안 CPU 스파이크에 대한 응용 프로그램을 모니터링하고 크래시 덤프를 생성하는 것이 주 목적인 명령 줄 유틸리티입니다. 또한 ProcDump에는 중단 된 창 모니터링 (Windows 및 작업 관리자가 사용하는 동일한 창 중단 정의 사용), 처리되지 않은 예외 모니터링 및 시스템 성능 카운터 값을 기반으로 덤프를 생성 할 수 있습니다. 또한 다른 스크립트에 임베드 할 수있는 일반 프로세스 덤프 유틸리티 역할을 할 수 있습니다.





1

Windows 10에서 작업 관리자는 누적 CPU 시간을 표시 할 수 있습니다. "앱 기록"탭 및 "사용 내역 삭제"로 이동하십시오. 이제 한두 시간 동안 작동하도록 두십시오.

Windows 10 누적 CPU 시간

이것이 수행하지 않는 것은 탭별로 브라우저의 사용량을 분류하는 것입니다. 자주 사용하지 않는 탭은 에너지를 사용하고 PC 속도를 저하시키는 열린 탭마다 엄청난 양의 작업을 수행합니다.


1

일부 특정 Windows 서버의 상태 및 CPU / 메모리 사용을 요구했습니다. 아래 스크립트를 사용했습니다.

이것은 Windows 검색 서비스의 예입니다.

  $cpu = Get-WmiObject win32_processor
  $search = get-service "WSearch"
  if ($search.Status -eq 'Running')
  {
  $searchmem = Get-WmiObject Win32_Service -Filter "Name = 'WSearch'"
  $searchid = $searchmem.ProcessID
  $searchcpu1 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  Start-Sleep -Seconds 1
  $searchcpu2 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  $searchp2p1 = $searchcpu2.PercentProcessorTime - $searchcpu1.PercentProcessorTime
  $searcht2t1 = $searchcpu2.Timestamp_Sys100NS - $searchcpu1.Timestamp_Sys100NS
  $searchcpu = [Math]::Round(($searchp2p1 / $searcht2t1 * 100) /$cpu.NumberOfLogicalProcessors, 1)
  $searchmem = [Math]::Round($searchcpu1.WorkingSetPrivate / 1mb,1)
  Write-Host 'Service is' $search.Status', Memory consumed: '$searchmem' MB, CPU Usage: '$searchcpu' %'
  }

  else
  {
  Write-Host Service is $search.Status -BackgroundColor Red
  }

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.