프로세스별 CPU 및 메모리 사용량 추적
-
09-06-2019 - |
문제
내 응용 프로그램 중 하나가 내가 원하는 것보다 더 많은 CPU 주기를 소비하는 것 같습니다.문제는 이 문제가 갑자기 발생하고 작업 관리자를 보는 것만으로는 즉각적인 사용량만 표시하므로 도움이 되지 않는다는 것입니다.
Windows에서 일부 프로세스의 CPU 및 메모리 사용량 기록을 추적하는 방법이 있습니까?예:"firefox" 추적을 시작하고 한 시간 정도 후에 해당 시간 동안의 CPU 및 메모리 사용량 그래프를 볼 수 있습니다.
저는 이를 달성하기 위해 기성 도구나 프로그래밍 방식을 찾고 있습니다.
해결책
그냥 입력하세요 perfmon
~ 안으로 Start > Run
Enter를 누르세요.성능 창이 열리면 + 기호를 클릭하여 그래프에 새 카운터를 추가합니다.카운터는 PC 작동 방식의 다양한 측면을 나타내며 유사성에 따라 "성능 개체"라는 그룹으로 그룹화됩니다.
질문이 있는 경우 "프로세스", "메모리" 및 "프로세서" 성능 개체를 선택할 수 있습니다.그러면 실시간으로 이러한 카운터를 볼 수 있습니다.
나중에 검사를 위해 성능 데이터를 저장하도록 유틸리티를 지정할 수도 있습니다.이렇게 하려면 왼쪽 패널에서 "성능 로그 및 경고"를 선택하십시오.(위에서 언급한 카운터를 제공하는 시스템 모니터 콘솔 바로 아래에 있습니다.없으면 "파일" > "스냅인 추가/제거"를 클릭하고 추가를 클릭한 후 목록에서 "성능 로그 및 경고"를 선택합니다.) "성능 로그 및 경고"에서 새 모니터링 구성을 생성합니다. "카운터 로그"에서.그런 다음 카운터를 추가하고 샘플링 속도, 로그 형식(바이너리 또는 일반 텍스트) 및 로그 위치를 지정할 수 있습니다.
다른 팁
프로세스 탐색기 프로세스별로 소요된 총 CPU 시간과 프로세스별 기록 그래프를 표시할 수 있습니다.
perfmon.exe를 사용하여 메모리 사용량 추적을 위해 "프로세스" 카운터 아래의 "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, 메모리 사용량 등을 프로그래밍 방식으로 추적할 수 있습니다.
Perfmon.exe는 이 인터페이스의 GUI 프런트 엔드이며, 프로세스를 모니터링하고 로그에 정보를 기록하며 사후에 로그를 분석할 수 있습니다.세계에서 가장 우아한 프로그램은 아니지만 작업을 완료합니다.
Process Lasso는 그래프가 아닌 프로세스 자동화 및 우선 순위 클래스 최적화를 위해 더 많이 설계되었습니다.그 말은, 하다 프로세스별 CPU 사용 내역(그래프에 흰색 선으로 그려짐)을 제공하지만 그렇지 않습니다. 아니다 프로세스별 메모리 활용 내역을 제공합니다.
부인 성명:저는 Process Lasso의 저자이지만 더 나은 솔루션(perfmon이 최고임)이 있기 때문에 여기서 실제로 이를 보증하지는 않습니다.
최고의 기능은 Windows Vista+ 리소스 및 성능 모니터입니다.시간 경과에 따른 프로세스별 CPU, 메모리, 네트워크 및 디스크 액세스 사용량을 추적할 수 있습니다.오래 전에 만들어졌어야 했던 훌륭한 전체 시스템 정보 유틸리티입니다.내가 착각하지 않는 한, 시간 경과에 따른 프로세스별 CPU 및 메모리 사용률을 추적할 수 있습니다(나열된 다른 항목 중에서).
C#/Perl/Java 스크립트를 사용하여 WMI 명령을 사용하여 사용률 데이터를 얻을 수도 있습니다. 이에 대한 단계는 다음과 같습니다.
2개의 WMI 선택 쿼리를 실행하고 CPU% 사용률 공식을 적용해야 합니다.
1.총 논리 프로세스 수를 검색하려면
select NumberOfLogicalProcessors from Win32_ComputerSystem
2.PercentProcessorTime, TimeStamp_Sys100NS(CPU 사용률 공식이 적용되어 실제 사용률을 얻음) 및 WorkingSetPrivate(RAM)의 값을 1초의 절전 간격으로 최소 2회 검색합니다.
select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234
삼.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 쿼리를 지원하는 모든 프로그래밍 언어에 적용됩니다.
이건 해보진 않았지만, ProcDump 더 나은 솔루션인 것 같습니다.
사이트 설명:
ProcDump는 응용 프로그램의 CPU 스파이크를 모니터링하고 관리자나 개발자가 스파이크의 원인을 확인하는 데 사용할 수 있는 스파이크 중에 크래시 덤프를 생성하는 것이 주요 목적인 명령줄 유틸리티입니다.ProcDump에는 정지 창 모니터링(Windows 및 작업 관리자에서 사용하는 것과 동일한 창 정지 정의 사용), 처리되지 않은 예외 모니터링도 포함되어 있으며 시스템 성능 카운터 값을 기반으로 덤프를 생성할 수 있습니다.또한 다른 스크립트에 포함할 수 있는 일반 프로세스 덤프 유틸리티 역할을 할 수도 있습니다.
흠, 그러고 보니 프로세스 탐색기 할 수 있지만 그래프가 너무 편리하지는 않습니다.여전히 대안/더 나은 방법을 찾고 있습니다.
Perfmon.exe는 Windows에 내장되어 있습니다.
당신은 한 번보고 싶을 수도 있습니다 올가미 처리.
CPU/RAM/IO 속도 기록 그래프에 taskinfo를 사용합니다.http://www.iarsn.com/taskinfo.html
그러나 갑자기 응답하지 않는 현상은 결함이 있는 HD/SS 드라이브로 인한 인터럽트 시간처럼 들립니다.