문제

일반적으로 CPU 사용량이 약 2-4%인 winforms 응용 프로그램이 있습니다.제한된 횟수 동안 CPU가 최대 27%까지 급증하는 현상이 나타났습니다.실제로 이러한 급증의 원인을 파악하는 가장 좋은 프로파일링 도구는 무엇입니까?우리는 dottrace를 사용하지만 정확히 CPU 스파이크에 매핑하는 방법을 모르겠습니다.

도움을 주셔서 감사합니다

도움이 되었습니까?

해결책

저는 이전에 RedGate의 ANTS 프로파일러와 Visual Studio Team System에 있는 내장 프로파일러라는 2가지 프로파일링 도구를 사용했습니다.

RedGate를 사용한지 꽤 시간이 지났습니다(http://www.red-gate.com/products/ants_profiler/index.htm) 프로파일러. 최근에는 Visual Studio 2008에 내장된 프로파일러를 사용했습니다.

그러고 보니 RedGate 제품이 사용하기 더 직관적인 느낌이 들었습니다.RedGate 제품을 사용할 때 저를 좌절시켰던 한 가지는 프로파일러에게 특정 지점부터 시작하는 내 코드만 프로파일링하도록 지시할 수 없다는 것이었습니다. 상당한 양의 코드가 도달할 때까지 도달할 수 없는 성능 저하가 있었습니다. 이미 실행되어 결과가 오염되었습니다.그 이후로 해당 기능을 추가했을 수도 있습니다.

Visual Studio용 내장 버전은 최고급 버전의 제품에서만 사용할 수 있습니다.내가 틀렸다면 누군가 정정해 주지만 "Professional" 버전에도 프로파일러가 없는 것 같습니다.현재 Team System Developer Edition을 사용하고 있습니다. 하다 코드 분석 도구가 있습니다.

하지만 VS 버전의 기능 중 하나는 프로파일링을 일시 중지하고 프로파일링을 일시 중지한 상태에서 앱을 시작할 수 있다는 것입니다. 따라서 매우 구체적인 작업의 성능에 집중할 수 있습니다.이는 분석 결과를 이해하려고 할 때 매우 도움이 될 수 있습니다.

편집하다:두 도구 모두 메모리 사용량, 특정 메서드가 호출된 횟수, 각 메서드에 소요된 시간을 보여줍니다.내가 아는 한 그들이 하지 않는 것은 특정 시점의 CPU 사용량을 보여주는 것입니다.그러나 CPU 사용량과 특정 코드 블록에서 소요되는 시간 사이에는 강한 상관관계가 있을 가능성이 높습니다.

앱에서 특정 작업을 호출하여 지속적으로 CPU 스파이크를 복제할 수 있다면 VS 프로파일러를 사용하여 프로파일링을 일시 중지한 상태에서 앱을 시작하고 일반적으로 발생하는 작업을 수행하기 직전에 프로파일링을 활성화합니다. 스파이크를 실행하고 그 결과를 검토해 보세요.

물론 이는 스파이크를 재현하기 위한 일종의 결정론적 동작이 있다고 가정합니다.그렇지 않다면 ...성능 저하의 후보로 스레드 프로세스나 가비지 수집을 고려할 수 있습니다.

다른 팁

Compuware의 DevPartner를 찾았습니다. http://www.compuware.com/ 훌륭한 프로파일링 도구가 됩니다.불행하게도 현재로서는 VS 2008을 지원하지 않는 것 같습니다.

또한, 이 급증이 실제로 걱정스럽습니까?그리고 어떤 종류의 하드웨어에서 이것을 보나요?쿼드 코어 CPU에서 27%로 급증하면 걱정할 수 있지만 800Mhz P3에서는 그렇지 않습니다.

얼마나 오랫동안 스파이크가 유지되나요? @매트 가비지 수집에 문제가 있을 수 있다는 좋은 점이 있습니다.또는 잠재적으로 디스크로 교체할 수도 있습니다.

오랜 시간 동안 전체 시스템 성능에 영향을 미치나요, 아니면 가끔씩 단 몇 초 동안만 영향을 미치나요?

이에 대한 해결책을 찾는 것이 걱정할 필요가 없다는 것이 아니라 얼마나 중요한가요?

또한 Sysinternal Process Explorer 및 Perfmon을 사용하여 애플리케이션에 대해 많은 것을 배울 수 있습니다(GC에서 스파이크가 발생하는 것처럼).

스파이크를 보여주고 그 원인을 드릴다운하여 원인을 확인할 수 있는 가장 좋은 도구는 Xperf/Xperfview 도구입니다.

확인해 보세요http://msdn.microsoft.com/en-us/performance/cc825801.aspx

그리고http://msdn.microsoft.com/en-us/library/cc305221.aspx

이러한 도구는 ETW 기술(Windows용 이벤트 추적)을 기반으로 하며, 이를 통해 프로세스와 전체 시스템에서 무슨 일이 일어나고 있는지 매우 정확하게 볼 수 있습니다.

또한 이러한 도구를 사용하면 사후 분석을 위한 추적을 캡처하고 기능을 연결/분리할 수도 있습니다.도움이 되었기를 바랍니다.

앱이 단일 스레드인 경우 최고의 프로파일링 도구는 IDE입니다.

추가됨:어쩌면 당연할 수도 있지만 CPU 사용량 비율은 그다지 명확한 개념이 아닙니다.프로그램이 실행 중이면 100%입니다.그렇지 않은 경우에는 0%입니다.따라서 부분 백분율은 시간이 지남에 따라 일종의 평활 적분을 기반으로 해야 합니다.그러나 그것이 무엇이든, 당신은 스파이크를 보고 있습니다.일부 프로파일러에서는 이러한 급증 상황을 파악하여 해당 간격만 분석할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top