다음을 통해 공유


성능 데이터 수집

쿼리를 만들고 카운터를 추가한 후 PdhCollectQueryData 함수를 호출하여 쿼리의 모든 카운터에 대한 현재 원시 데이터를 검색합니다.

속도 카운터와 같은 많은 카운터는 형식이 지정된 데이터 값을 계산하기 위해 두 개의 데이터 샘플이 필요합니다. PDH는 현재 샘플 및 이전에 수집된 샘플에 대한 데이터를 기본. 다음 절차에서는 표시 가능한 값을 계산하기 위해 두 개의 샘플이 필요한 카운터 값을 수집하는 방법을 설명합니다.

표시 가능한 값을 계산하기 위해 두 개의 샘플이 필요한 카운터 값을 수집하려면

  1. PdhCollectQueryData를 호출하여 첫 번째 샘플을 수집합니다.
  2. Sleep 함수를 호출하여 컬렉션 간에 최소 1초 동안 기다립니다.
  3. PdhCollectQueryData를 다시 호출하여 두 번째 샘플을 수집합니다.
  4. PdhGetFormattedCounterValue 함수를 호출하여 표시 가능한 값을 계산합니다.
  5. 2~4단계를 반복합니다.

대기 기간을 직접 구현하는 대신 PdhCollectQueryDataEx 함수를 호출하여 지정된 시간을 대기하고 샘플을 수집한 다음 애플리케이션 정의 이벤트를 트리거하는 타이밍 스레드를 만들 수 있습니다.

로그 파일에서 성능 데이터를 쿼리하려는 경우 시간 범위를 정의할 수도 있습니다. 시간 범위는 쿼리를 시간 범위 내에서 수집된 샘플로 제한합니다(각 샘플에는 수집된 시간에 대한 타임스탬프를 포함). 시간 범위를 설정하고 검색하는 방법에 대한 자세한 내용은 쿼리의 시간 범위 설정을 참조 하세요.

성능 데이터를 수집하고 로그 파일에 쓰려면 PdhCollectQueryData를 호출하는 대신 PdhUpdateLog 함수를 호출합니다. 자세한 내용은 로그 파일 작업 및 로그 파일에 성능 데이터 쓰기를 참조하세요.

표시 가능한 샘플 값 계산에 대한 자세한 내용은 성능 데이터 표시를 참조 하세요.

여러 프로세서 카운터 이해

일부 성능 카운터는 단일 프로세서 시스템을 위해 설계되었으며 다중 프로세서 컴퓨터에는 정확하지 않을 수 있습니다. 예를 들어 프로세스는 단일 프로세서의 100%로 제한됩니다. 그러나 스레드는 총 100% 이상인 여러 프로세서를 사용할 수 있습니다.

"\Processor(_Total)\% Processor Time" 카운터 값은 모든 프로세서의 평균 사용량입니다. 예를 들어 프로세서가 100%이고 다른 프로세서가 0%인 경우 이 카운터는 50%를 보고합니다. 따라서 범위는 0에서 100까지입니다.

"\Process(X)\% Processor Time"(여기서 X는 프로세스 이름) 카운터 값은 프로세스 X의 모든 스레드에 의한 프로세서 사용량의 합계입니다. 예를 들어 프로세서가 두 개 있는 컴퓨터에서 프로세스에 두 개의 스레드가 있는 경우 하나는 CPU의 75%를 차지하고 다른 하나는 다른 CPU의 80%를 차지하는 경우 이 카운터는 155%를 보고합니다. 이 카운터의 범위는 0부터 100 * ProcessorCount까지입니다.

카운터 세트를 사용하는 Process 경우 CPU 사용량에 대해 예상되는 값 범위 밖의 값을 받을 수 있습니다. CPU 사용량을 계산하려면 PDH에 두 개의 샘플(각각 원시 값과 타임스탬프를 포함)이 필요합니다. PDH는 인스턴스 이름만 사용하여 프로세스와 일치하므로 경우에 따라 다른 프로세스의 샘플을 혼합할 수 있습니다. 예를 들어 인스턴스 이름이 같은 프로세스 3개가 샘플링되고 세 번째 샘플 이후에 프로세스 중 하나가 종료되는 경우 다른 프로세스가 종료된 프로세스에 의해 비워진 슬롯으로 이동합니다. 따라서 종료된 프로세스의 세 번째 샘플과 종료된 프로세스의 슬롯으로 이동한 프로세스의 네 번째 샘플을 사용하기 때문에 네 번째 샘플의 서식을 지정할 때 형식이 지정된 카운터는 잘못된 값을 제공합니다.

다음 표에서는 데이터가 수집되는 동안 프로세스가 종료될 경우 이러한 상황이 발생할 수 있는 방법을 보여 주며, 이 표에서는 프로세스 X의 세 인스턴스에 대한 5개의 카운터 값 샘플을 보여 줍니다. 샘플은 1초 간격으로 수집됩니다. 세 번째 샘플이 수집되면 슬롯 1의 프로세스 X가 종료됩니다. 슬롯 1의 프로세스 X가 종료되면 슬롯 2의 프로세스 X가 슬롯 1로 이동합니다. 슬롯 2에서 프로세스 X에 대한 네 번째 샘플을 수집하는 경우 첫 번째 값은 1,000 대신 20이고 두 번째 값은 1,500입니다. 카운터 값의 서식을 지정하면 예상 500밀리초 대신 1,480밀리초가 표시됩니다. 다섯 번째 샘플 값의 서식을 지정하면 예상 값이 표시됩니다.

예제 프로세스 X의 슬롯 0 프로세스 X용 슬롯 1 프로세스 X용 슬롯 2
샘플 1 0 0 0
샘플 2 20 10 500
샘플 3 40 20 1,000
샘플 4 60 1,500(이전 슬롯 2에서) 해당 없음. 이제 슬롯 1에서 수집됩니다.
샘플 5 80 2,000 해당 없음. 이제 슬롯 1에서 수집됩니다.

Windows 11부터 새 Process V2 카운터 세트를 사용하여 이 문제를 방지할 수 있습니다. 카운터 세트에는 Process V2 인스턴스 이름에 프로세스 ID가 포함됩니다. 이렇게 하면 원래 Process 카운터 세트와 함께 표시되는 일관되지 않은 결과를 방지할 수 있습니다.