2013-01-03 2 views
2

성능 카운터 범주 중 일부가 때때로 누락되는 것 같습니다. 이유는 알 수 없습니다.성능 카운터가 누락되었습니다.

아래의 코드는 다음과 같이 예외가 발생합니다 : 장르가 존재하지 않습니다

이 오류 메시지가 성능 범주를 조회 할

을하지 못했습니다. 범주 이름 : HP EVA 실제 디스크
그룹 범주 대상 목록 :
ServiceModelService 4.0.
즐 즐

인쇄 밖으로 긴 성능 카운터의 목록,하지만 난 후 하나 포함되어 있습니다. perfmon.exe를 보면 빠진 범주를 한 번 찾을 수 있습니다.

다음 코드를 사용하여 카테고리 내의 다른 카운터를 찾습니다.

public static string[] GetPerformanceCategory(string CategoryName) 
{ 
    //Console.WriteLine("CategoryName to Search for: " + CategoryName); 
    if (string.IsNullOrEmpty(CategoryName)) 
     throw new NullReferenceException("CategoryName is empty"); 

    try 
    { 
     PerformanceCounterCategory perfCat = new PerformanceCounterCategory(CategoryName); 

     string[] catInstances = perfCat.GetInstanceNames(); 
     return catInstances; 
    } 
    catch(Exception Ex) 
    { 
     StringBuilder ErrorMsg = new StringBuilder(); 
     ErrorMsg.AppendLine("Failed to lookup Preformance Category"); 
     ErrorMsg.AppendLine("Error Msg: " + Ex.Message); 
     ErrorMsg.AppendLine("CategoryName: " + CategoryName); 
     ErrorMsg.AppendLine("Category list on target:"); 

     StringBuilder CatList = new StringBuilder(); 
     var categories = PerformanceCounterCategory.GetCategories(); 
     foreach (var Cat in categories) 
      CatList.AppendLine(Cat.CategoryName);     

     ErrorMsg.AppendLine(CatList.ToString()); 

     Logger.WriteToLog(ErrorMsg.ToString(), EventLogEntryType.Error); 
     return null; 
    }  
} 

질문은 성능 카운터를 사라지게 할 수있는 "마법"이 있습니까? 아니면 뭔가 구체적으로해야합니까?

+0

CategoryName과 같은 소리가 "HP EVA Physical Disk \ nGroup"으로 설정됩니다. 그 맞습니까? –

+0

예. 그게 내가 원하는 걸. 하지만 물론 no \ n? 사본이 과거의 오류였습니까? – EKS

+1

죄송합니다. 의견에서 캐리지 리턴을 얻을 수 없습니다. "Disk"와 "Group"사이에 개행 문자가있는 것처럼 보였습니다. 거기에 개행 문자가있는 것처럼 보이는 예외 메시지를 보면 알 수 있습니다. 어느 쪽이든 목록에 나타나지 않는다고 말하면 아무 문제가없는 것 같아요. –

답변

0

PerformanceCounterCategory.GetCategories()를 사용하여이 문제가 발생합니다. 내 범주가 1 대의 컴퓨터에서 누락되었습니다. 다른 것들은 문제가 없습니다.

Perfmon은 범주를 볼 수 있지만 동일한 상승 된 명령 프롬프트에서 typeperf는 범주를 볼 수 있지만 .net 코드는 볼 수 없습니다.

한 메모. Windows Server 2008 R2에서 문제가 발생했습니다. 문제는 XP 또는 Windows 발생하지 않습니다 7. 나는 정확히 같은 문제가 있고,이 내가 그것을 해결하는 방법입니다

2

:

서버 아키텍처 (x86 또는 64) 및 .NET (C#을) 목표를 구축해야합니다 동일하지 않으면 코드가 모든 performace 카운터에 액세스 할 수 없습니다 (빌드 대상과 서버가 다른 경우 성능 카운터의 하위 집합 만 사용할 수 있음).

Visual Studio에서 솔루션 탐색기의 프로젝트를 마우스 오른쪽 단추로 클릭 한 다음 "속성"을 선택하고 "빌드"로 이동하여 플랫폼 대상으로 x64를 선택합니다 (서버가 x64 인 경우 x86을 선택하십시오.).

+0

나를 위해 트릭을했습니다 - 감사합니다! –

관련 문제