none
윈도우 8에서 성능모니터 쿼리 오류 RRS feed

  • 질문

  • 윈도우 7에서 동작하는 성능모니터 쿼리가 윈도우8에서는 오류가 발생합니다. 

    다음은 특정 프로세스의 CPU 사용량을 알아오는 쿼리입니다. 

    #define PROCSS_PERFM_CPU L"\\Process(ProcessName)\\% Processor Time" 

    똑같은 프로그램을 윈도우 8에서 동작시켰을 때, 오류가 발생했습니다. 

    윈도우 8에서 구하는 방법을 알고 싶습니다. 

    감사합니다. 

    2015년 11월 2일 월요일 오전 1:17

답변

  • (오류 메시지도 함께 올려주세요. 또한, 재현 가능한 간단한 프로그램도 올려주시면 답변하는 사람들이 좀더 확실하게 문제에 접근할 수 있습니다.)

    참고로, 해당 윈도우 8에 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance" 경로의 ProcessNameFormat 값이 있는지 확인해 보세요. 그게 있어서 2로 설정되어 있으면 프로세스 이름이 아닌 Process ID 기준으로 지정하는 것으로 바뀝니다. 관련해서 다음의 글을 참고하세요.

    Perfmon: Identifying processes by PID instead of instance
    ; http://blogs.technet.com/b/askperf/archive/2010/03/30/perfmon-identifying-processes-by-pid-instead-of-instance.aspx

    2015년 11월 2일 월요일 오전 6:24
  • 아... 그럼 뭔가 가지고 있는 윈도우 8의 시스템이 잘못된 것입니다. 원래 윈도우 8에도 process 범주의 성능 카운터가 제공됩니다. 아래의 글에 보면 osguli님과 같은 상황은 아니지만,

    The Mystery of the Missing Process Performance Counter in Perfmon
    ; http://blogs.technet.com/b/mscom/archive/2008/12/18/the-mystery-of-the-missing-process-performance-counter-in-perfmon.aspx

    윈도우 2000 리소스 킷에 있는 exctrlst.exe를 이용해 문제를 파악하는 것을 볼 수 있는데, 이와 같은 식으로 왜 해당 윈도우 8에 Process 관련 성능 카운터가 보이지 않는지 찾아내야 할 것 같습니다.

    일단, 그게 어렵게 되면 Win32 API 중에 CPU 사용량을 알아내는 다음의 함수를 이용할 수 있습니다.

    GetProcessTimes function
    ; https://msdn.microsoft.com/en-us/library/ms683223%28VS.85%29.aspx

    2015년 11월 3일 화요일 오전 12:16

모든 응답

  • (오류 메시지도 함께 올려주세요. 또한, 재현 가능한 간단한 프로그램도 올려주시면 답변하는 사람들이 좀더 확실하게 문제에 접근할 수 있습니다.)

    참고로, 해당 윈도우 8에 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance" 경로의 ProcessNameFormat 값이 있는지 확인해 보세요. 그게 있어서 2로 설정되어 있으면 프로세스 이름이 아닌 Process ID 기준으로 지정하는 것으로 바뀝니다. 관련해서 다음의 글을 참고하세요.

    Perfmon: Identifying processes by PID instead of instance
    ; http://blogs.technet.com/b/askperf/archive/2010/03/30/perfmon-identifying-processes-by-pid-instead-of-instance.aspx

    2015년 11월 2일 월요일 오전 6:24
  • 말씀해주셨던 경로에 보니, ProcessNameFormat이라는 항목은 없습니다. 

    그리고 제가 질문드렸던 부분에 대해서는 오류 코드정보가 윈도우 차원에서 나오는 것은 아닙니다.

    단지, PdhAddCounterW() API호출이 실패하면서 쿼리를 실행하지 못합니다. 

    쿼리문은

    L"\\Process(ProcessName)\\% Processor Time" 

    을 사용하였고 ProcessName에 제가 측정하고자 하는 프로세스의 이름을 넣어주었습니다. 

    윈도우 7에서는 정상적으로 작동하기 때문에, 이 코드 자체가 문제인것 같진 않습니다. 

    윈도우 8에서 프로세스별 CPU 사용량을 측정할수 있는 새로운 쿼리가 있다면 조언부탁드리겠습니다.

    감사합니다.

    참고) 윈도우 8 성능모니터 화면

    참고) 윈도우 7 성능모니터 화면

    • 편집됨 osguli 2015년 11월 2일 월요일 오전 9:22
    2015년 11월 2일 월요일 오전 9:18
  • 아... 그럼 뭔가 가지고 있는 윈도우 8의 시스템이 잘못된 것입니다. 원래 윈도우 8에도 process 범주의 성능 카운터가 제공됩니다. 아래의 글에 보면 osguli님과 같은 상황은 아니지만,

    The Mystery of the Missing Process Performance Counter in Perfmon
    ; http://blogs.technet.com/b/mscom/archive/2008/12/18/the-mystery-of-the-missing-process-performance-counter-in-perfmon.aspx

    윈도우 2000 리소스 킷에 있는 exctrlst.exe를 이용해 문제를 파악하는 것을 볼 수 있는데, 이와 같은 식으로 왜 해당 윈도우 8에 Process 관련 성능 카운터가 보이지 않는지 찾아내야 할 것 같습니다.

    일단, 그게 어렵게 되면 Win32 API 중에 CPU 사용량을 알아내는 다음의 함수를 이용할 수 있습니다.

    GetProcessTimes function
    ; https://msdn.microsoft.com/en-us/library/ms683223%28VS.85%29.aspx

    2015년 11월 3일 화요일 오전 12:16
  • 감사합니다. 

    우선 모든 윈도우 운영체제에서 동작하도록 하는 것이 목표이기때문에, 알려주신 WIN32 API를 활용하려고 합니다. 

    그래서 해당 API에 대한 스터디가 필요할것 같습니다. 

    이 문제로 몇 달 이상이 시간을 소요했는데 정말 감사합니다.


    2015년 11월 3일 화요일 오전 2:28