다음을 통해 공유


중복 인스턴스 이름 처리

공급자는 고유한 인스턴스 이름을 사용하는 것이 좋지만 모든 공급자가 사용하는 것은 아닙니다. 중복 인스턴스 이름을 표시하는 규칙은 # 문자와 일련 번호를 인스턴스 이름에 추가하는 것입니다( 이름 처음 나타나는 경우 제외). 예를 들어 샘플에 세 개의 svchost 인스턴스가 있는 경우 세 개의 이름이 svchost, svchost#1svchost#2표시됩니다.

아쉽게도 이 규칙이 문제를 완전히 해결하지는 못합니다. 일련 번호는 특정 인스턴스 이름이 샘플에 표시되는 순서에 따라 할당되며 이 순서는 샘플에서 샘플로 일치하지 않을 수 있습니다. 예를 들어 샘플 A는 svchost(PID 100), svchost#1(PID 200) 및 svchost#2(PID 300)를 볼 수 있습니다. 그런 다음 PID 100을 사용하는 svchost가 종료되면 다음 샘플에서는 svchost(PID 200) 및 svchost#1(PID 300)를 볼 수 있습니다. 기본 일치 논리는 샘플 B의 svchost#1 통계(PID 300)와 샘플 A의 svchost#1 통계(PID 300)를 일치시키려고 시도하며, 이로 인해 샘플 B에 대한 잘못된 결과가 발생합니다. 오류는 샘플에 고유하지 않은 새 인스턴스가 표시되거나 고유하지 않은 인스턴스가 샘플에 표시되지 않을 때 발생합니다(추가/제거된 인스턴스가 마지막 인스턴스가 아닌 경우).

프로세스 카운터 세트

이 문제는 EXE 이름이 고유하지 않더라도 프로세스의 EXE 이름만 인스턴스 이름으로 사용하기 때문에 Process 카운터 세트에 특히 문제가 됩니다. 호환성 문제로 인해 Windows에서 Process 카운터 세트의 기본 동작을 변경할 수 없습니다.

Windows 11 이상에는 새 Process V2 카운터세트가 포함됩니다. Process V2 카운터 세트에는 인스턴스 이름에 PID(프로세스 ID)가 포함되어 Process 카운터 세트의 이름 중복 문제를 방지합니다.

HKLM\System\CurrentControlSet\Services\Perfproc\Performance 레지스트리 키 아래에 ProcessNameFormat 또는 ThreadNameFormat 레지스트리 값을 설정하여 고유한 인스턴스 이름을 사용하도록 ProcessThread 카운터 세트의 동작을 변경할 수 있습니다.

주의

Process 카운터 세트에 고유한 인스턴스 이름을 사용하도록 설정하면 일부 프로그램에서 고유하지 않은 명명 패턴이 예상되므로 일부 프로그램이 잘못 동작할 수 있습니다. 예를 들어 잘 알려진 특정 EXE 이름을 가진 인스턴스를 찾는 프로그램은 고유한 인스턴스 이름을 사용하도록 설정한 후에 해당 인스턴스를 더 이상 찾을 수 없습니다.

이러한 값에 대한 레지스트리 유형은 REG_DWORD. 값을 2 설정하면 프로세스 인스턴스 이름에 PID(프로세스 식별자)가 추가되고 TID(스레드 식별자)가 스레드 인스턴스 이름에 추가됩니다. 이 기능을 사용하지 않도록 설정하려면 값을 1로 설정하거나 값을 삭제합니다.