2008-11-14 5 views
37

성능 카운터를 회사의 .NET 기반 사이트로 사용할 때 오버 헤드가 얼마나 큰지 궁금합니다.성능 카운터의 성능에 미치는 영향

사이트를 지속적으로 업데이트하고 싶거나 측정 할 때만 더 좋습니까?

답변

20

성능에 미치는 영향은 무시해도됩니다. 마이크로 소프트의 의도는 항상 성능 카운터에 기록한다는 것입니다. 성능 저하를 유발하는 성능 카운터의 모니터링 (또는 캡처)입니다. 따라서 perfmon과 같은 것을 사용하여 데이터를 캡처 할 때만 가능합니다.

실제로 성능 카운터 개체는 "측정 할 때 수행하는"효과 만 있습니다.

+0

감사합니다. 혹시 몇 가지 번호를 가르쳐 주시겠습니까? 나는 그들이 얼마나 좋은지에 관해서 궁금합니다 ... – Boaz

+0

나는 그것을 본 적이 한번도 본 적이 없지만 그것을 의심 할 이유가 없습니다. 응용 프로그램에서 간단하게 증명할 수 있습니다. – dpurrington

+0

안녕하세요 dpurrington. "성능 저하를 일으킬 수있는 모니터링입니다"라고 말하면 카운터를 업데이트/게시하거나 프로세스를 모니터링하는 프로세스에서 성능 저하가 나타납니다. – urig

1

내가 발견 한 사실은 대부분의 응용 프로그램에서 느리지는 않다는 것입니다. 저는 단호한 고리에 넣지 않겠습니다. 아니면 수천 번이라고하는 것입니다.

둘째, 프로그래밍 방식으로 성능 카운터를 만드는 것이 매우 느린 것으로 확인되었으므로 코드가 아닌 직접 작성해야합니다.

2

필자는 famoushamsandwich에 동의하지만 샘플링 속도가 적당하고 (5 초 이상) 합리적인 카운터 세트를 모니터링하는 한 측정의 영향은 무시할 수 있다고 (대부분의 경우) .

7

성능 카운터는 공유 메모리 (일명 메모리 매핑 파일)의 4/8 바이트에 대한 포인터 일 뿐이므로 비용은 int/long variabile에 액세스하는 비용과 매우 유사합니다.

27

성능 카운터를 설정하는 오버 헤드는 일반적으로 걱정할 정도로 높지 않습니다 (CLR이 실제로 관리를하기 때문에 CLR 오버 헤드와 함께 공유 메모리 영역과 일부 .NET 개체 설정). 여기에서는 PerformanceCounter와 같은 클래스를 언급합니다.

perfromance 카운터를 등록하는 오버 헤드는 상당히 느릴 수 있지만 컴퓨터 전체 상태를 변경하려고하기 때문에 설치시 한 번 발생하기 때문에 일반적으로 문제가되지 않습니다. 그것은 당신이하는 모든 복사에 비하면 정말 왜소합니다. 일반적으로 런타임에 수행하려는 작업이 아닙니다. 여기서는 PerformanceCounterInstaller를 언급합니다.

성능 카운터를 업데이트하는 오버 헤드는 일반적으로 공유 메모리에서 연동 작업을 수행하는 데 드는 비용입니다. 이것은 일반적인 메모리 액세스보다 느리지 만 프로세서 프리미티브 (캐시를 포함하여 전체 메모리 하위 시스템에서 원자 작업을 수행하는 방법)입니다. 일반적으로이 비용은 걱정할 정도로 높지 않습니다. 정상적인 메모리 작업의 10 배가 될 수 있으며 업데이트에 따라 잠재적으로 더 나빠질 수 있으며 스레드와 CPU에서 어떤 경쟁이 일어날 지 알 수 있습니다. 그러나 원자 적 업데이트로 프로세스 간 통신을 위해 인터 로킹 된 작업보다 더 나은 작업을 수행하는 것은 문자 그대로 불가능하며 잠금이 설정되지 않습니다. 여기서는 PerformanceCounter.Increment 및 이와 유사한 메서드를 참조합니다.

성능 카운터를 읽는 오버 헤드는 일반적으로 공유 메모리에서 읽습니다. 다른 사람들이 말했듯이 합리적인 기간 (다른 샘플링과 마찬가지로)에 샘플링을하고 PerfMon을 생각하고 샘플링을 사람의 눈금으로 유지하려고합니다 (밀리 초 대신 초를 생각하십시오). 문제.

마지막으로, 성능 카운터는 매우 가볍기 때문에 커널에서 드라이버, 사용자 응용 프로그램에 이르기까지 Windows의 모든 곳에서 사용됩니다. Microsoft는 내부적으로 이러한 기능을 사용합니다.

조언 : 실제 성능 카운터를 사용하는 것이 이해하기 쉬운 (중도적인) 학습과 올바른 것을 측정하는 학습 곡선 (쉬운 것처럼 보이지만 잘못 이해하는 경우가 많음)입니다.

8

나는 이것을 많이 테스트했습니다.

기존의 컴팩 1Ghz 1 프로세서 컴퓨터에서 약 10,000 개의 카운터를 생성하고 원격으로 약 20 %의 CPU 사용량을 모니터링 할 수있었습니다. 이것들은 커스텀 카운터가 아니며 단지 CPU를 체크하고 있습니다.

기본적으로 모두에 영향을 거의 미치지 않는 최신 컴퓨터의 카운터를 모니터링 할 수 있습니다.

개체의 인스턴스화는 몇 초에서 몇 분 정도 걸릴 수 있습니다. 필자는 수집 한 모든 카운터에 대해 다중 스레드를 제안합니다. 그렇지 않으면 응용 프로그램이이 개체를 영원히 만들 수 있습니다. MS가 오래 걸리면 어떤 일을하는지 확신 할 수 없지만, 카운터 1 개와 스레드 1 개를 동시에 수행 할 수있는 1000 개의 스레드로 1000 개의 카운터를 수행 할 수 있습니다.

관련 문제