UFO ET IT

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

ufoet 2023. 4. 8. 14:28
반응형

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

사용하고 있는 애플리케이션 중 하나가 CPU 사이클을 원하는 것보다 많이 소비하고 있는 것 같습니다.문제는 버스트 단위로 발생하며 태스크 매니저만 봐도 즉각적인 사용만 표시되므로 도움이 되지 않는다는 것입니다.

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

저는 이것을 실현하기 위한 기성 도구나 프로그램적인 방법을 찾고 있습니다.

+R 를 눌러 입력합니다.perfmon를 누릅니다.[ Performance ](퍼포먼스)창이 열리면 + 기호를 클릭하여 그래프에 새 카운터를 추가합니다.카운터는 PC의 동작방식의 다른 측면이며 유사성에 따라 "퍼포먼스 오브젝트"라고 불리는 그룹으로 그룹화됩니다.

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

유틸리티를 지정하여 나중에 검사를 위해 성능 데이터를 저장할 수도 있습니다.이를 수행하려면 왼쪽 패널에서 "퍼포먼스 로그 및 경고"를 선택합니다.(위의 카운터를 제공하는 System Monitor 콘솔 바로 아래에 있습니다.표시되지 않으면 [파일]> [스냅인 추가/삭제]를 클릭하여 [추가]를 클릭하여 목록에서 [퍼포먼스 로그 및 경고]를 선택합니다)."퍼포먼스 로그 및 경고"에서 "카운터 로그" 아래에 새 모니터링 구성을 만듭니다.그런 다음 카운터를 추가하고 샘플링 속도, 로그 형식(이진 또는 일반 텍스트) 및 로그 위치를 지정할 수 있습니다.

프로세스 탐색기는 프로세스에 걸린 총 CPU 시간과 프로세스별 기록 그래프를 표시할 수 있습니다.

perfmon.exe를 사용하여 메모리 사용량을 추적하기 위해 "Process" 카운터 아래의 "Private Bytes" 카운터를 사용해보니 잘 작동합니다.

이걸 쓰셔도 될 것 같아요이것은, 고객에게 있어서 기능해, 지정된 프로세스의 프로세서 시간을 보고합니다.

@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.

동의합니다. perfmon.exe를 사용하면 감시하는 프로세스의 카운터를 추가할 수 있습니다(오른쪽 패널 오른쪽 클릭).

성능 개체: 프로세스 "목록에서 인스턴스 선택"을 선택하고 Firefox를 선택합니다.

WMI는 Windows Management Instrumentation이며 모든 최신 버전의 Windows에 내장되어 있습니다.CPU 사용량, 디스크 I/O 및 메모리 사용량 등의 정보를 프로그래밍 방식으로 추적할 수 있습니다.

퍼포먼스몬exe는 이 인터페이스에 대한 GUI 프런트엔드이며 프로세스를 감시하고 로그에 정보를 쓰며 사후 로그를 분석할 수 있습니다.세계에서 가장 우아한 프로그램은 아니지만, 일을 해낼 수 있습니다.

프로세스 Lasso는 그래프가 아닌 프로세스 자동화 및 우선순위 클래스 최적화를 위해 설계되었습니다., 프로세스별 CPU 사용률 이력(그래프에 흰색 선으로 표시)은 제공되지만 프로세스별 메모리 사용률 이력은 제공하지 않습니다.

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

Windows Vista+ 자원과 퍼포먼스 모니터는 지금까지 없었던 최고의 제품입니다.CPU, 메모리, 네트워크 및 디스크 액세스의 사용 상황을 시간 경과에 따른 프로세스별로 추적할 수 있습니다.이 유틸리티는 시스템 전체의 뛰어난 정보 유틸리티로, 오래전에 작성되었어야 합니다.제가 잘못 알고 있는 경우를 제외하고, CPU 및 메모리 사용률을 시간 경과에 따라 추적할 수 있습니다.

C#/Perl/Java 스크립트를 사용하여 WMI 명령어를 사용하여 사용률 데이터를 가져올 수도 있습니다.이 절차는 다음과 같습니다.

2개의 WMI Select 쿼리를 실행하여 CPU% 사용률 공식을 적용해야 합니다.

1. 논리 프로세스의 총수를 취득한다.

select NumberOfLogicalProcessors from Win32_ComputerSystem

2. Percent Processor의 값을 취득한다.Time, TimeStamp_Sys100NS(CPU 사용률 공식이 적용되어 실제 사용률 퍼센티지를 취득) 및 WorkingSetPrivate(RAM)는 슬립 간격1초로 최소2회입니다

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3. CPU 사용률 공식을 적용한다.

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

p2는 Percent Processor를 나타냅니다.두 번째로 취득된 시각.p1은 Percent Processor를 나타냅니다.처음 취득한 시각 t2 및 t1은 TimeStamp_Sys100NS용입니다.

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

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

아직 시험해 본 은 없지만 Proc Dump가 더 나은 솔루션인 것 같습니다.

사이트로부터의 설명:

Proc Dump는 응용 프로그램의 CPU 스파이크를 감시하고 스파이크 시 크래시 덤프를 생성하는 것을 주된 목적으로 하는 명령줄 유틸리티입니다.이러한 크래시 덤프는 관리자 또는 개발자가 스파이크의 원인을 특정하기 위해 사용할 수 있습니다.또한 Proc Dump에는 행된 윈도 모니터링(Windows 및 태스크 매니저가 사용하는 것과 동일한 윈도 행 정의를 사용), 처리되지 않은 예외 모니터링이 포함되어 있으며 시스템 퍼포먼스카운터 값에 따라 덤프를 생성할 수 있습니다.또한 다른 스크립트에 포함할 수 있는 일반적인 프로세스 덤프 유틸리티로도 사용할 수 있습니다.

일부 특정 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
  }

음, 그래프가 그리 편리하지는 않지만 프로세스 탐색기가 이 작업을 수행할 수 있다는 것을 알 수 있습니다.아직 다른/더 나은 방법을 찾고 있습니다.

퍼포먼스몬exe는 윈도에 내장되어 있습니다.

프로세스 Lasso에 대해 살펴보는 것이 좋습니다.

CPU/RAM/IO 속도의 이력 그래프에 taskinfo를 사용합니다.http://www.iarsn.com/taskinfo.html

그러나 폭발적으로 반응하지 않는 것은 HD/SS 드라이브의 결함으로 인한 인터럽트 시간처럼 들립니다.

윈도우즈 10에서 작업 관리자는 누적 CPU 시간을 표시할 수 있습니다.'앱 이력' 탭과 '사용 이력 삭제'로 이동합니다.이제 한 시간 또는 두 시간 동안 작업을 계속합니다.

Windows 10 누적 CPU 시간

브라우저의 사용량을 탭별로 분류하지 않습니다.대부분의 경우 비활성 탭은 엄청난 양의 작업을 수행하며, 각 탭이 열리면 전원이 소비되고 PC 속도가 느려집니다.

프로세스 모니터 다운로드

  1. 프로세스 모니터 시작

  2. 필요한 경우 필터 설정

  3. 메뉴 옵션> 프로파일링 이벤트 입력

  4. 스레드 프로파일링 이벤트 생성을 누르고 빈도를 선택한 후 확인을 누릅니다.

  5. 수집된 이력 데이터를 표시하려면 [Tools]> [ Process Activity Summary ]메뉴를 입력합니다.

언급URL : https://stackoverflow.com/questions/69332/tracking-cpu-and-memory-usage-per-process

반응형