2010-05-24 4 views
1

어제 밤 사이트에서 부하 테스트를 수행했습니다. 내 공유 캐시 중 하나가 병목 현상을 발견했습니다. ReaderWriterLockSlim을 사용하여 데이터 업데이트를 제어하고 있습니다. 불행히도 한 번에 약 200 건의 요청이 거의 동시에 데이터를 업데이트하려고합니다. 이것은 CPU 사용량 급상승과도 일치합니다.ASP.NET 검색 평균 CPU 사용량

업데이트되는 데이터는 ASP.NET 캐시에 있습니다. 내가하고 싶은 것은 CPU 사용량이 75 % 정도라면 캐시를 건너 뛰고 다른 컴퓨터의 데이터베이스를 조회하고 싶습니다.

제 문제는 CPU 사용을 확인하기 위해 새로운 성능 카운터를 만드는 것이 얼마나 비쌉니까? 또한, 만약 내가 아마 2 ~ 3 초 동안 평균 CPU 사용량을 원할 것입니다. 그러나, 나는 거기 앉아서 현재 캐시를 업데이트하는 데 걸리는 시간보다 오래 걸리므로 CPU 시간을 계산할 수 없습니다.

평균적인 CPU 사용량을 쉽게 얻을 수있는 방법이 있습니까? 이것에 결점이 있습니까?

또한 잠금 대기 시간을 합한 다음 특정 임계 값에서 데이터베이스로 전환하는 것을 고려 중입니다. 이 접근 방식에 대한 우려는 하드웨어를 변경하면 시스템에 부담을 덜 주면서 더 많은 잠금을 허용 할 수 있다는 것입니다. 또한 임계 값에 대한 올바른 균형을 찾는 것이 번거롭고 시스템의 다른 부하를 고려하지 않습니다. 그러나 그것은 간단한 접근 방법이며, 시간의 99 %가 단순합니다.

답변

1

Microsoft의이 문서에서는 Tuning .Net Application Performance에 대해 다루고 CPU 및 I/O 바운드 응용 프로그램을 결정하기 위해 수집하고 비교할 카운터를 강조 표시합니다.

실행 중에 이것을 모니터링하고 집중력이 커지면 캐시를 우회하는 것처럼 들리는군요. 집중적 인 처리를 캐시 호출에서 데이터베이스 호출로 옮기지 않을까요? 확실하게 값 비싼 DB 호출을 피할 수있는 캐시가 있습니다.

무효화 된 캐시를 다시 채우고 싶습니까? 캐시에서 부실 데이터를 제공 할 때의 영향은 무엇입니까? 재 채우기 기능을 잠그고 프로세스가 완료 될 때까지 다른 요청에 부실 데이터를 제공 할 수 있습니다.

위의 기사를 바탕으로 우리는 테스트 중에 다음 카운터 개체를 수집하여 병목 현상을 확인하는 데 필요한 모든 카운터를 제공합니다.

  • .NET의 CLR 예외
  • .NET CLR 메모리
  • ASP.NET 응용 프로그램
  • ASP.NET
  • 메모리
  • 페이징 파일
  • 프로세서
  • 스레드

CLR TuningASP.NET Tuning에 대한 기사의 섹션에서는 발생할 수있는 병목 현상을 강조하고 성능을 향상시키기위한 구성 변경을 제안합니다. 더 나은 성능을 얻기 위해 확실히 스레드 풀 설정을 변경했습니다.

Changing and Retrieving Performance Counter Values 코드를 통해 기존 프로세서 카운터에 액세스하는 데 도움이 될 수 있지만 이는 개인적으로 시도한 내용이 아닙니다.

+0

후 오래된 데이터의 개념을 검토하고 어떤 데이터의 실제 부분이 부실하다, 그것은 "당신은 방금 다시 채우는 기능을 잠그고 프로세스가 완료 될 때까지 다른 요청에 오래된 데이터를 제공 할 수있다."할 말이 .. 감사! – Sam

관련 문제