다음을 통해 공유


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

레지스트리 함수 사용하여 특수 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 성능 개체에 대한 성능 데이터를 검색합니다. 관심 있는 데이터가 V1 공급자에서 가져온 것을 알고 있는 경우 불필요한 V2 공급자 데이터를 수집하지 않도록 Global 대신 사용합니다.
n1 n2 ... 하나 이상의 성능 개체에 대한 성능 데이터를 검색합니다. 공백으로 구분된 목록에서 검색하려는 각 개체와 연결된 10진수 인덱스 지정 예를 들어 시스템 및 메모리 개체를 검색하려는 경우 해당 이름 문자열의 인덱스가 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 이상:Costly 범주에 포함된 항목을 제외하고 컴퓨터에 등록된 모든 V1 성능 개체에 대한 메타데이터 검색합니다.
MetadataCostly Windows 10 20H1 이상: 비용이 많이 드는 성능 개체에 대한 메타데이터 검색합니다.
OLD_MetadataCostly Windows 10 20H1 이상: 비용이 많이 드는 V1 성능 개체에 대한 메타데이터 검색합니다.

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

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

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

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

메타데이터 컬렉션

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

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

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

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

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

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

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

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

퍼플리브 주

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 참조하세요.