重複するインスタンス名の処理
プロバイダーは一意のインスタンス名を使用することが強く推奨されていますが、すべてのプロバイダーがそうしているとは限りません。 重複するインスタンス名を表示する規則は、名前の最初の出現箇所を除き、インスタンス名に #
文字とシリアル番号を追加することです。 たとえば、サンプルに svchost
のインスタンスが 3 つある場合、3 つの名前は svchost
、svchost#1
、svchost#2
と表示されます。
残念ながら、この規則によって問題が完全に解決されるわけではありません。 シリアル番号は、特定のインスタンス名がサンプルに出現する順序に基づいて割り当てられます。この順序はサンプル間で一貫性がない可能性があります。 たとえば、サンプル A に svchost
(PID 100)、svchost#1
(PID 200)、svchost#2
(PID 300) が表示される場合があります。 次に、PID 100 の svchost がシャットダウンすると、次のサンプルには svchost
(PID 200) と svchost#1
(PID 300) が表示されることがあります。 基本的な一致ロジックで、サンプル A の svchost#1
統計 (PID 200 から) とサンプル B の svchost#1
統計 (PID 300 から) を照合しようとすると、サンプル B の結果が無効になります。新しい一意でないインスタンスがサンプルに表示されたとき、または一意でないインスタンスがサンプルに表示されなくなったときにエラーが発生します (追加または削除されたものが最後のインスタンスであった場合は除く)。
プロセス カウンターセット
この問題は、Process
カウンターセットで特に問題になります。EXE 名が一意でない場合でも、プロセスの EXE 名のみをインスタンス名として使用するためです。 互換性の問題のため、 Windows での Process
カウンターセットの既定の動作は変更できません。
ヒント
Windows 11 以降には、新しい Process V2
カウンターセットが含まれています。 Process V2
カウンターセットには、インスタンス名にプロセス ID (PID) が含まれており、Process
カウンターセットの名前重複の問題が回避されます。
HKLM\System\CurrentControlSet\Services\Perfproc\Performance
レジストリ キーに ProcessNameFormat
または ThreadNameFormat
レジストリ値を設定することで、一意のインスタンス名を使用するように Process
および Thread
カウンターセットの動作を変更できます。
注意事項
Process
カウンターセットに対して一意のインスタンス名を有効にすると、一部のプログラムが正しく動作しない可能性があります。多くのプログラムでは一意でない名前付けパターンが想定されているためです。 たとえば、特定の既知の EXE 名を持つインスタンスを探しているプログラムでは、一意のインスタンス名を有効にした後、そのインスタンスを見つけることができなくなります。
これらの値のレジストリの種類は REG_DWORD
です。 値を 2
に設定すると、プロセス識別子 (PID) がプロセス インスタンス名に、スレッド識別子 (TID) がスレッド インスタンス名に追加されます。 この機能を無効にするには、値を 1 に設定するか、値を削除します。