ASP.NET의 성능 카운터

업데이트: 2007년 11월

ASP.NET에서는 시스템 및 응용 프로그램이라는 두 개의 성능 카운터 그룹을 지원합니다. 시스템 성능 카운터는 Windows 성능 모니터에 ASP.NET 성능 카운터 개체로 노출됩니다. 응용 프로그램 성능 카운터는 ASP.NET Applications 성능 개체로 노출됩니다.

참고:

각 성능 카운터에 연결된 값은 400밀리초마다 업데이트됩니다. 모니터링 응용 프로그램을 만들 때 이 경과 시간을 고려하여 코드에서 유효하지 않은 카운터 값이 사용되지 않도록 해야 합니다. 자세한 내용은 시스템 모니터링 구성 요소 사용을 참조하십시오.

시스템 및 응용 프로그램 성능 카운터에 대한 자세한 내용은 방법: 성능 카운터 범주 만들기, 범주 및 카운터 관리방법: 사용자 지정 성능 카운터 만들기를 참조하십시오.

ASP.NET 웹 응용 프로그램의 성능을 모니터링할 때, 다음 표에 있는 성능 카운터를 추적할 수 있습니다.

성능 개체

성능 카운터

ASP.NET

Application Restarts

ASP.NET

Requests Queued

ASP.NET

Worker Process Restarts

ASP.NET Applications

Errors Total

ASP.NET Applications

Requests/Sec

Processor

% CPU Utilization

참고:
클라이언트 로드에 관계없이 CPU 활용율이 낮거나 CPU 활용율을 극대화할 수 없으면 해당 웹 응용 프로그램의 잠금이나 리소스에 경합이 있는 것입니다.

또한 웹 응용 프로그램의 성능에 문제가 있는지 여부를 파악할 때에는 다음 성능 카운터를 유용하게 사용할 수 있습니다.

성능 개체

성능 카운터

ASP.NET Applications

Pipeline Instance Count

.NET CLR Exceptions

# of Exceps Thrown

System

Context Switches/sec

# of Exceps Thrown 카운터에는 또 다른 성능 지표라고 할 수 있는, 응용 프로그램에서 throw된 예외의 수가 표시됩니다. 하지만 일부 코드 경로가 제대로 작동하려면 예외가 필요합니다. 예를 들어, Response 개체의 Redirect 메서드는 catch할 수 없는 ThreadAbortException 예외를 throw합니다. 따라서 예외로 인해 응용 프로그램에 오류가 생겼는지 여부를 확인할 때 Errors Total 카운터를 사용하여 이 값을 추적하는 것이 유용합니다.

Context Switches/sec 카운터에서는 웹 서버 컴퓨터에 있는 모든 CPU에 의해 스레드 컨텍스트가 전환되는 비율이 측정됩니다. 이 카운터의 값이 크면 잠금에 치열한 경합이 있거나 사용자와 커널 모드 사이에 전환이 잦은 상태입니다. 이 문제가 발생하는 경우 샘플링 프로파일러와 기타 도구를 사용하여 더 조사해야 합니다.

ASP.NET 시스템 성능 카운터

ASP.NET에서는 다음 표에 나열된 ASP.NET 시스템 성능 카운터가 지원됩니다. 이러한 카운터는 웹 서버 컴퓨터상의 모든 ASP.NET 응용 프로그램에서 얻은 정보를 집계합니다.

참고:

상태 서버가 실행 중인 서버 컴퓨터에만 적용되는 ASP.NET 성능 개체의 State Server Sessions 카운터와, 처리 중인 사용자 세션에만 적용되는 ASP.NET Applications 성능 개체의 Sessions 카운터 사이에는 큰 차이가 있습니다.

  • Application Restarts
    웹 서버의 작동 기간 동안 응용 프로그램이 다시 시작된 횟수입니다. Application_OnEnd 이벤트가 발생할 때마다 Application restarts 값이 증가합니다. Web.config 파일의 변경, 응용 프로그램 Bin 디렉터리에 저장되어 있는 어셈블리의 변경, ASP.NET 웹 페이지의 잦은 변경으로 인한 응용 프로그램의 재컴파일 등으로 인해 응용 프로그램이 다시 시작될 수 있습니다. 이 카운터의 값이 갑자기 증가하면 문제로 인해 웹 응용 프로그램이 재생된 것입니다. 이 경우에는 가능한 빨리 확인을 해야 합니다.

    참고:

    이 값은 IIS(인터넷 정보 서비스) 호스트를 다시 시작할 때마다 0으로 다시 설정됩니다.

  • Application Running
    서버 컴퓨터에서 동시에 실행되는 응용 프로그램의 수입니다.

  • Requests Disconnected
    통신 오류로 인해 연결이 끊어진 요청 수입니다.

  • Requests Queued
    큐에서 서비스를 기다리는 요청 수입니다. 이 수가 클라이언트 로드에 비례하여 지속적으로 늘어나기 시작하면 웹 서버 컴퓨터가 처리할 수 있는 동시 요청의 한계에 도달한 것입니다. 이 카운터의 기본 최대값은 5,000입니다. 컴퓨터의 Machine.config 파일에서 이 설정을 변경할 수 있습니다.

  • Requests Rejected
    요청을 처리할 서버 리소스 부족으로 인해 실행되지 않은 총 요청 수입니다. 이 카운터는 서버가 사용 중임을 나타내는 503 HTTP 상태 코드를 반환하는 요청 수를 나타냅니다.

  • Request Wait Time
    큐에 있는 가장 최근의 요청이 처리를 위해 대기한 시간(밀리초)입니다.

  • Session State Server Connections Total
    Out-of-process 세션 상태 데이터가 저장되는 컴퓨터에 대한 세션 상태 연결의 총 수입니다. 자세한 내용은 세션 상태 모드를 참조하십시오.

  • Session SQL Server Connections Total
    세션 상태 데이터가 저장되는 Microsoft SQL Server 데이터베이스에 대한 세션 상태 연결의 총 수입니다. 자세한 내용은 세션 상태 모드를 참조하십시오.

  • State Server Sessions Abandoned
    명시적으로 중단된 사용자 세션 수입니다. 이것은 브라우저 닫기나 다른 사이트 탐색 등과 같은 특정한 사용자 작업에 의해 종료된 세션입니다. 이 카운터는 상태 서버 서비스(aspnet_state)를 실행하는 컴퓨터에서만 사용할 수 있습니다.

  • State Server Sessions Active
    현재 활성화되어 있는 사용자 세션 수입니다. 이 카운터는 상태 서버 서비스(aspnet_state)를 실행하는 컴퓨터에서만 사용할 수 있습니다.

  • State Server Sessions Timed Out
    사용자 작업이 없어 비활성화된 사용자 세션 수입니다. 이 카운터는 상태 서버 서비스(aspnet_state)를 실행하는 컴퓨터에서만 사용할 수 있습니다.

  • State Server Sessions Total
    프로세스가 수행되는 동안 만들어진 세션 수입니다. 이 카운터는 State Server Sessions Active, State Server Sessions AbandonedState Server Sessions Timed Out의 전체 값입니다. 이 카운터는 상태 서버 서비스(aspnet_state)를 실행하는 컴퓨터에서만 사용할 수 있습니다.

  • Worker Process Restarts
    서버 컴퓨터에서 작업자 프로세스가 다시 시작된 횟수입니다. 갑자기 실패하거나 의도적으로 재활용되는 경우에에는 작업자 프로세스가 다시 시작될 수 있습니다. 이 카운터가 값자기 올라가면 가능한 빨리 확인해야 합니다.

  • Worker Process Running
    서버 컴퓨터에서 실행되는 작업자 프로세스 수입니다.

ASP.NET 응용 프로그램 성능 카운터

ASP.NET에서는 다음 표에 나열된 응용 프로그램 성능 카운터가 지원됩니다. 이 카운터를 사용하면 ASP.NET 응용 프로그램의 단일 인스턴스 성능을 모니터링할 수 있습니다. 이 카운터에는 __Total__ 이라는 고유한 인스턴스를 사용할 수 있습니다. 이 인스턴스는 이 항목의 앞부분에서 설명한 전역 카운터와 마찬가지로 웹 서버에 있는 모든 응용 프로그램의 카운터를 집계합니다. __Total__ 인스턴스는 항상 사용할 수 있습니다. 이 카운터는 현재 서버에서 실행 중인 응용 프로그램이 없을 경우 0을 표시합니다.

  • Anonymous Requests
    익명 인증을 사용한 요청 수입니다.

  • Anonymous Requests/Sec
    익명 인증을 사용한 초 당 요청 수입니다.

  • Cache Total Entries
    캐시에 있는 총 엔트리 수입니다. 이 카운터에는 ASP.NET 페이지 프레임워크에서 사용한 캐시와 캐시 API를 통해 사용한 응용 프로그램 캐시가 모두 포함됩니다.

  • Cache Total Hits
    캐시의 총 적중 수입니다. 이 카운터에는 ASP.NET 페이지 프레임워크에서 사용한 캐시와 캐시 API를 통해 사용한 응용 프로그램 캐시가 모두 포함됩니다.

  • Cache Total Misses
    응용 프로그램 당 실패한 캐시 요청 수입니다. 이 카운터에는 ASP.NET 페이지 프레임워크에서 사용한 캐시와 캐시 API를 통해 사용한 응용 프로그램 캐시가 모두 포함됩니다.

  • Cache Total Hit Ratio
    캐시 실패 적중률입니다. 이 카운터에는 ASP.NET 페이지 프레임워크에서 사용한 캐시와 캐시 API를 통해 사용한 응용 프로그램 캐시가 모두 포함됩니다.

  • Cache Total Turnover Rate
    초당 캐시에서 추가 및 제거된 수입니다. 캐시가 얼마나 효율적으로 사용되는지 확인하는 데 유용합니다. 회전율이 높으면 캐시가 효율적으로 사용되지 않는 것입니다.

  • Cache API Entries
    응용 프로그램 캐시에 있는 총 엔트리 수입니다.

  • Cache API Hits
    외부 캐시 API를 통해서만 액세스한 캐시의 총 적중 수입니다. 이 카운터는 ASP.NET 페이지 프레임워크에서 사용한 캐시는 추적하지 않습니다.

  • Cache API Misses
    외부 캐시 API를 통해 액세스한 캐시 중에서 실패한 총 요청 수입니다. 이 카운터는 ASP.NET 페이지 프레임워크에서 사용한 캐시는 추적하지 않습니다.

  • Cache API Hit Ratio
    외부 캐시 API를 통해 액세스할 때 실패한 캐시 적중률입니다. 이 카운터는 ASP.NET 페이지 프레임워크에서 사용한 캐시는 추적하지 않습니다.

  • Cache API Turnover Rate
    외부 API를 통해 사용할 때 초당 캐시에서 추가 및 제거된 수(ASP.NET 페이지 프레임워크에서 사용한 것 제외)입니다. 이것은 캐시가 얼마나 효율적으로 사용되는지 확인하는 데 유용합니다. 회전율이 높이면 캐시가 효율적으로 사용되지 않는 것입니다.

  • Compilations Total
    현재 웹 서버 프로세스 수행 중에 발생한 총 컴파일 수입니다. 컴파일은 .aspx, .asmx, .ascx 또는 .ashx 파일 이름 확장명이 붙은 파일이나 코드 숨김 소스 파일을 서버에서 동적으로 컴파일할 때 발생합니다.

    이 수는 응용 프로그램의 모든 부분에 대한 요청이 이루어지는 초기에 최대값으로 올라갑니다. 그러나, 일단 컴파일을 수행하면 컴파일된 결과 출력이 디스크에 저장되어 소스 파일이 변경되기 전까지 다시 사용됩니다. 즉, 프로세스를 다시 시작하는 이벤트가 발생해도 응용 프로그램이 수정되거나 다시 배포되기 전까지는 이 카운터가 0(비활성)으로 유지됩니다.

  • Debugging Requests
    디버깅을 사용하는 동안 발생한 요청 수입니다.

  • Errors During Preprocessing
    구문 분석 중에 발생한 오류 수입니다. 컴파일 및 런타임 오류는 제외됩니다.

  • Errors During Compilation
    동적 컴파일을 수행하는 동안 발생한 오류 수입니다. 파서 및 런타임 오류는 제외됩니다.

  • Errors During Execution
    HTTP 요청을 실행하는 동안 발생한 총 오류 수입니다. 파서와 컴파일 오류는 제외됩니다.

  • Errors Unhandled During Execution
    HTTP 요청을 실행하는 동안 발생한 처리되지 않은 총 오류 수입니다. 처리되지 않은 오류는 사용자 코드에 트랩되지 않고 ASP.NET 내부 오류 처리 논리에 입력되는 모든 런타임 예외를 말합니다. 이 규칙에 대한 예외는 다음 상황에서 발생합니다.

    • 사용자 지정 오류가 사용되거나 오류 페이지가 정의된 경우, 또는 두 가지 모두에 해당하는 경우

    • Page_Error 이벤트가 사용자 코드에 정의되고 오류가 ClearError 메서드를 사용하여 지워지거나 리디렉션이 수행되는 경우

  • Errors Unhandled During Execution/Sec
    HTTP 요청을 실행하는 동안 발생한 초 당 처리되지 않은 예외 수입니다.

  • Errors Total
    HTTP 요청을 실행하는 동안 발생한 총 오류 수입니다. 파서, 컴파일 또는 런타임 오류가 모두 포함됩니다. 이 카운터는 Errors During Compilation, Errors During PreprocessingErrors During Execution 카운터의 합계입니다. 정상적으로 작동하는 웹 서버라면 오류를 생성하지 않아야 합니다. ASP.NET 웹 응용 프로그램에서 오류가 발생하는 경우에는 오류 복구에 대한 코드 경로가 크게 다르기 때문에 처리량 결과가 왜곡될 수 있습니다. 따라서 테스트를 하기 전에 응용 프로그램에 버그가 있는지 검사하고 수정하는 것이 좋습니다.

  • Errors Total/Sec
    HTTP 요청을 실행하는 동안 발생한 초당 오류 수입니다. 파서, 컴파일 또는 런타임 오류가 모두 포함됩니다.

  • Output Cache Entries
    출력 캐시에 있는 총 엔트리 수입니다.

  • Output Cache Hits
    출력 캐시에서 서비스된 총 요청 수입니다.

  • Output Cache Misses
    응용 프로그램 당 실패한 출력 캐시 요청 수입니다.

  • Output Cache Hit Ratio
    출력 캐시에서 서비스된 총 요청 비율(%)입니다.

  • Output Cache Turnover Rate
    초 당 출력 캐시에서 제거 및 추가된 수입니다. 회전율이 높으면 캐시가 효율적으로 사용되지 않는 것입니다.

  • Pipeline Instance Count
    지정한 ASP.NET 응용 프로그램에 대한 활성 요청 파이프라인 인스턴스의 수를 나타냅니다. 파이프라인 인스턴스 내에서는 스레드 하나만이 실행되기 때문에 이 값은 특정 응용 프로그램에 대해 처리되고 있는 동시 요청의 최대 수를 나타냅니다. 대부분의 경우, 로드 중일 때는 이 값이 낮은 것이 좋습니다. 이 수가 낮으면 CPU 활용율이 높은 것입니다.

  • Request Bytes In Total
    모든 요청의 총 크기(바이트)입니다.

  • Request Bytes Out Total
    클라이언트로 보낸 응답의 총 크기(바이트)입니다. 여기에는 HTTP 응답 헤더가 포함되지 않습니다.

  • Requests Executing
    현재 실행 중인 요청 수입니다.

  • Requests Failed
    실패한 요청의 총 수를 나타냅니다. 상태 코드가 400 이상이면 이 카운터의 값이 늘어납니다.

    요청으로 인해 상태 코드 401이 발생하면 이 카운터와 Requests Not Authorized 카운터의 값이 늘어납니다. 요청으로 인해 상태 코드 404 또는 414가 발생하면 이 카운터와 Requests Not Found 카운터의 값이 늘어납니다. 요청으로 인해 상태 코드 500이 발생하면 이 카운터와 Requests Timed Out 카운터의 값이 늘어납니다.

  • Requests Not Found
    리소스를 찾을 수 없어 실패한 요청 수입니다(상태 코드 404, 414).

  • Requests Not Authorized
    인증이 없어서 실패한 요청 수입니다(상태 코드 401).

  • Requests Succeeded
    성공적으로 실행된 요청 수입니다(상태 코드 200).

  • Requests Timed Out
    시간이 초과된 요청 수를 나타내며 여기에 해당하는 상태 코드는 500입니다.

  • Requests Total
    서비스를 시작한 이후 총 요청 수입니다.

  • Requests/Sec
    초 당 실행된 요청 수입니다. 이 값은 응용 프로그램 현재 처리량을 나타냅니다. 로드가 계속되는 상태에서 이 값은 가비지 수집, 캐시 정리 스레드, 외부 서버 도구 등의 다른 서버 작업을 제외하고 일정한 범위를 유지해야 합니다.

  • Sessions Active
    현재 활성화된 세션 수입니다. 이것은 메모리 내 세션 상태에만 지원됩니다.

  • Sessions Abandoned
    명시적으로 중단된 세션 수입니다. 이것은 메모리 내 세션 상태에만 지원됩니다.

  • Sessions Timed Out
    시간이 초과된 세션 수입니다. 이것은 메모리 내 세션 상태에만 지원됩니다.

  • Sessions Total
    전체 세션 수입니다. 이것은 메모리 내 세션 상태에만 지원됩니다.

  • Transactions Aborted
    모든 활성 ASP.NET 응용 프로그램에서 취소된 트랜잭션의 수입니다.

  • Transactions Committed
    모든 활성 ASP.NET 응용 프로그램에서 커밋된 트랜잭션의 수입니다.

  • Transactions Pending
    모든 활성 ASP.NET 응용 프로그램에서 진행 중인 트랜잭션의 수입니다.

  • Transactions Total
    모든 활성 ASP.NET 응용 프로그램의 총 트랜잭션 수입니다.

  • Transactions/Sec
    모든 활성 ASP.NET 응용 프로그램에서 초당 시작된 트랜잭션 수입니다.

참고 항목

개념

성능 개요

ASP에서 ASP.NET 2.0으로 마이그레이션할 때의 성능 문제

ASP.NET 응용 프로그램 성능 모니터

기타 리소스

ASP.NET 캐싱