다음을 통해 공유


레지스트리 함수를 사용하여 카운터 데이터 사용

레지스트리 함수를 사용하여 특수 HKEY_PERFORMANCE_DATA 레지스트리 키에서 성능 데이터를 수집합니다.

성능 데이터는 실제로 레지스트리에 저장되지 않습니다. 레지스트리 함수를 호출하면 시스템이 적절한 성능 데이터 공급자로부터 데이터를 수집합니다.

참고

일반적으로 레지스트리 함수를 사용하여 카운터 데이터를 사용하지 않아야 합니다. 대신 PDH(성능 데이터 도우미) 함수를 사용해야 합니다. PDH 함수는 더 쉽게 사용할 수 있으며 레지스트리 함수의 잘못된 사용을 통해 발생할 수 있는 많은 성능 및 안정성 문제를 방지합니다.

참고

Windows OneCore 앱을 작성하는 경우 레지스트리 함수를 사용할 수 없습니다. 대신 PerfLib V2 소비자 함수를 사용합니다.

레지스트리 함수는 V1 공급자로부터 데이터를 수집하기 위한 하위 수준 API입니다. 레지스트리 함수는 V2 소비자 함수를 호출하는 변환 계층 을 통해 V2 공급자 의 데이터 수집도 지원 합니다.

로컬 시스템에서 성능 데이터를 가져오려면 RegQueryValueEx 함수를 호출합니다. 를 키로 사용합니다 HKEY_PERFORMANCE_DATA . 첫 번째 호출에서 키가 열립니다. 먼저 키를 명시적으로 열 필요가 없습니다.

원격 시스템에서 성능 데이터를 가져오려면 RegConnectRegistry 함수를 호출합니다 . 원격 시스템의 컴퓨터 이름을 사용하고 를 키로 사용합니다 HKEY_PERFORMANCE_DATA . 이 호출은 원격 시스템의 성능 데이터를 나타내는 키를 검색합니다. 키 대신 HKEY_PERFORMANCE_DATA 이 키를 사용하여 데이터를 검색합니다.

성능 데이터 가져오기가 완료되면 RegCloseKey 함수를 사용하여 키에 대한 핸들을 닫아야 합니다. 이는 로컬 및 원격 사례 모두에 중요합니다.

  • RegCloseKey(HKEY_PERFORMANCE_DATA) 는 실제로 레지스트리 핸들을 닫지 않지만 캐시된 모든 데이터를 지우고 로드된 성능 DLL을 해제합니다.
  • RegCloseKey(hkeyRemotePerformanceData) 는 원격 머신의 레지스트리에 대한 핸들을 닫습니다.

중요

동안 DLL_PROCESS_DETACH을 호출 RegCloseKey(HKEY_PERFORMANCE_DATA) 하지 마세요.

RegQueryValueEx 함수의 매개 변수를 사용하여 lpValueName 검색할 정보를 나타냅니다. 다음 표에서는 에 대해 지정할 수 있는 값을 나열합니다 lpValueName. 값 문자열은 대/소문자를 구분하지 않습니다.

설명
Global 범주에 포함된 Costly 개체를 제외하고 컴퓨터에 등록된 모든 성능 개체에 대한 성능 데이터를 검색합니다.
OLD_Global Windows Vista 이상: 범주에 포함된 Costly 개체를 제외하고 컴퓨터에 등록된 모든 V1 성능 개체에 대한 성능 데이터를 검색합니다. 관심 있는 Global 데이터가 V1 공급자에서 가져온 것을 알고 있는 경우 불필요한 V2 공급자 데이터를 수집하지 않도록 대신 사용합니다.
n1 n2 ... 하나 이상의 성능 개체에 대한 성능 데이터를 검색합니다. 공백으로 구분된 목록에서 검색하려는 각 개체와 연결된 10진수 인덱스 를 지정합니다. 예를 들어 System 및 Memory 개체를 검색하려는 경우 해당 이름 문자열의 인덱스가 2와 4인 경우 문자열 "2 4"을 지정합니다. 쿼리는 요청한 개체와 다른 수의 개체를 반환할 수 있습니다. 지정된 개체를 사용할 수 없거나 지정된 개체가 다른 개체 형식에 따라 달라지거나 공급자가 직접 요청되지 않은 데이터를 반환하는 경우에 발생할 수 있습니다. 예를 들어 스레드는 프로세스에 따라 달라지므로 개체에서 Thread 데이터를 요청하는 경우 결과에는 개체의 Process 데이터가 포함됩니다.
Counter n 지정된 언어 식별자에 대한 이름 문자열(예: 의 경우 영어)을 검색 Counter 9합니다. 반환된 이름 문자열을 사용하여 지정된 이름에 해당하는 인덱스를 찾거나 지정된 인덱스에 해당하는 이름을 찾습니다. 자세한 내용은 카운터 이름 및 도움말 텍스트 검색 을 참조하세요. 반환된 목록에는 개체(카운터 세트) 이름과 카운터 이름이 모두 포함됩니다. 이름이 개체 이름인지 카운터 이름인지 여부를 확인하는 간단한 방법은 없습니다.
Help n 지정된 언어 식별자에 대한 도움말 문자열(예: 의 경우 영어)을 Help 9검색합니다. 반환된 도움말 문자열을 사용하여 개체(카운터 세트) 또는 카운터 도움말 인덱스에 해당하는 설명을 찾습니다. 자세한 내용은 카운터 이름 및 도움말 텍스트 검색 을 참조하세요.
Costly 되지 않는: 프로세서 시간 또는 메모리 사용량 측면에서 수집 비용이 많이 드는 개체 형식에 대한 성능 데이터를 검색합니다. 이 컬렉션은 로드가 많은 컴퓨터에서 몇 분 정도 걸릴 수 있습니다. 애플리케이션이 이 데이터 수집 중에 사용자에게 응답해야 하는 경우 작업자 스레드에서 컬렉션을 수행해야 합니다.
MetadataGlobal Windows 10 20H1 이상: 범주에 포함된 개체를 제외하고 컴퓨터에 등록된 모든 성능 개체에 대한 메타데이터Costly 검색합니다.
OLD_MetadataGlobal Windows 10 20H1 이상: 범주에 포함된 개체를 제외하고 컴퓨터에 등록된 모든 V1 성능 개체에 대한 메타데이터Costly 검색합니다.
MetadataCostly Windows 10 20H1 이상: 비용이 많이 드는 성능 개체에 대한 메타데이터를 검색합니다.
OLD_MetadataCostly Windows 10 20H1 이상: 비용이 많이 드는 V1 성능 개체에 대한 메타데이터를 검색합니다.

레지스트리에서 반환하는 성능 데이터의 형식에 대한 자세한 내용은 성능 데이터 형식을 참조하세요.

컴퓨터에 등록된 카운터의 이름과 설명을 가져오는 예제는 카운터 이름 및 도움말 텍스트 검색을 참조하세요.

성능 데이터의 구성 요소에 액세스하는 예제는 개체, 인스턴스 및 카운터 이름 표시를 참조하세요.

카운터 값을 검색, 계산 및 인쇄하는 예제는 카운터 데이터 검색카운터 값 계산을 참조하세요.

메타데이터 컬렉션

Windows 10 20H1은 메타데이터 전용 컬렉션 작업에 대한 지원을 추가합니다. 이러한 작업은 컴퓨터에서 사용할 수 있는 성능 개체 및 카운터 목록을 만들 때 사용하기 위한 것입니다.

  • 메타데이터 전용 컬렉션은 메타데이터 전용 컬렉션을 지원하는 개체에서 instance 데이터 수집을 건너뛸 수 있으므로 해당 전체 데이터 컬렉션보다 더 빠를 수 있습니다.
  • 메타데이터 전용 컬렉션은 메타데이터 전용 컬렉션을 지원하는 개체에서 instance 데이터를 반환할 공간이 없기 때문에 해당 전체 데이터 컬렉션보다 적은 메모리를 사용합니다.
  • 메타데이터 전용 컬렉션은 메타데이터 전용 컬렉션을 지원하는 개체 인스턴스가 없더라도 사용 가능한 카운터 목록을 반환하므로 해당 전체 데이터 컬렉션보다 더 완전합니다.

메타데이터 전용 컬렉션의 적절한 사용은 프로세스 또는 스레드가 많은 서버에서 데이터를 수집할 때 특히 중요합니다. 일반 Global 컬렉션은 시스템의 각 프로세스 및 스레드에 대한 정보를 수집하고 반환해야 하지만 컬렉션 MetadataGlobal 은 프로세스 또는 스레드 정보를 수집할 필요가 없습니다.

PDH(성능 데이터 도우미) 함수는 컴퓨터에서 사용할 수 있는 성능 개체 집합을 결정할 때 메타데이터 전용 컬렉션을 자동으로 사용합니다.

메타데이터 전용 작업에 대한 운영 체제 지원은 레지스트리 값에 0이 아닌 값으로 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata 표시됩니다. 이 값이 없거나 로 설정된 0경우 메타데이터 전용 컬렉션(예: Global) 대신 전체 데이터 컬렉션(예: MetadataGlobal)을 사용합니다.

모든 성능 개체가 메타데이터 전용 컬렉션을 지원하는 것은 아닙니다. 컬렉션을 요청 MetadataGlobal 하면 Windows는 메타데이터 전용 지원을 위해 각 성능 개체를 검사(레지스트리 값의 HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata 0이 아닌 값으로 표시됨). 성능 개체가 메타데이터 전용 컬렉션을 지원하지 않는 경우 Windows는 개체에서 일반 데이터 수집을 수행합니다. 성능 개체가 메타데이터 전용 컬렉션을 지원하는 경우 Windows는 개체에서 메타데이터 전용 컬렉션을 수행합니다. 메타데이터 전용 쿼리를 위해 반환된 데이터에는 전체 데이터 및 메타데이터 전용 컬렉션의 블록이 모두 포함 PERF_OBJECT_TYPE 됩니다. 블록은 PERF_OBJECT_TYPE 메타데이터 전용 쿼리를 지원하거나 지원하지 않는 공급자로부터 블록이 수집되었는지 여부에 따라 instance 정보를 포함하거나 생략할 수 있습니다.

메타데이터 전용 컬렉션에서 반환된 데이터는 다음을 제외하고 일반 컬렉션의 데이터와 동일합니다.

  • NumInstances 구조 PERF_METADATA_MULTIPLE_INSTANCES 체의 PERF_OBJECT_TYPE 필드는 (개체가 0개 이상의 명명된 인스턴스를 지원함을 나타낸) 또는 PERF_METADATA_NO_INSTANCES (개체에 항상 1개의 명명되지 않은 instance 있음을 나타낸다)입니다.
  • 구조체 다음에는 블록이 PERF_OBJECT_TYPE 없습니다PERF_INSTANCE_DEFINITION.

Perflib

레지스트리 키는 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib 성능 카운터 수집과 관련된 여러 DWORD 값을 지원합니다. 이러한 동작은 일반적으로 기본 동작에 대해 설정되지 않아야 하지만 특정 시나리오에 필요한 경우 관리자가 구성할 수 있습니다.

  • Configuration Flags: 기본값은 0입니다. 특수 동작을 사용하도록 설정하려면 다음 플래그의 조합으로 설정할 수 있습니다.
    • 0x01: 데이터 버퍼 맞춤 오류에 대한 플러그 인을 테스트하지 마세요. 기본적으로 시스템은 플러그 인의 버퍼 맞춤의 유효성을 검사합니다.
    • 0x02: 플러그 인을 자동으로 사용하지 않도록 설정하지 마세요. 기본적으로 시스템은 충돌하거나 잘못된 동작을 보이는 플러그 인을 사용하지 않도록 설정합니다.
    • 0x04: 플러그 인 버퍼 무결성의 유효성을 검사하지 않습니다. 기본적으로 시스템은 플러그 인 버퍼 오버런을 확인합니다.
    • 0x08: 플러그 인 시간 제한에 대해 검사 않습니다. 기본적으로 시스템은 플러그 인 중단을 확인합니다.
  • Disable Performance Counters: 기본값은 0입니다. 1로 설정하면 시스템에 대해 V1 성능 카운터 컬렉션이 비활성화됩니다.
  • ExtCounterTestLevel: 기본값은 4입니다. 잘못된 플러그 인 동작을 막기 위해 시스템에서 수행하는 유효성 검사의 양을 제어합니다. 자세한 내용은 PM_COLLECT_PROC를 참조하세요.