2009년 1월 28일 수요일

성능 카운터에 대한 병목

성능 Count에 대한 자세한 설명과 임계치도 나와있어서 System 병목현상을 Check하는데 도움이 되는글일수 있겠다.

출처 : http://technet.microsoft.com/ko-kr/magazine/cc718984.aspx

● 하드 디스크 병목 현상

   디스크 시스템은 서버에서 프로그램 및 데이터를 저장하고 처리하므로 디스크 사용량 및 속도에 영향을 미치는 병목 현상은 서버의 전체적인 성능에 큰 영향을 줍니다. 디스크 개체가 서버에서 비활성화된 경우 명령줄 도구 Diskperf를 통해 활성화해야 합니다. 또한 % Disk Time은 100%를 초과할 수 있으므로 대신 % Idle Time, Avg. Disk sec/Read 및 Avg. Disk sec/write를 사용하면 하드 디스크가 얼마나 많이 사용되고 있는지 좀더 정확하게 파악할 수 있습니다. % Disk Time에 대한 자세한 내용은 support.microsoft.com/kb/310067 기술 자료 문서를 참조하십시오.

다음은 Microsoft Service Support 엔지니어가 디스크 모니터링을 위해 사용하는 카운터입니다.

LogicalDisk\% Free Space 선택한 논리 디스크 드라이브에서 사용할 수 있는 공간의 백분율을 측정합니다. 이 카운터가 15% 아래로 떨어지면 OS에서 중요 파일을 저장하기 위한 여유 공간이 부족할 수 있습니다. 이 경우 확실한 해결책은 디스크 공간을 늘리는 것입니다.

PhysicalDisk\% Idle Time 샘플 간격 중 디스크가 유휴 상태였던 시간 백분율을 측정합니다. 이 카운터가 20% 아래로 떨어지면 디스크 시스템이 포화 상태인 것입니다. 현재 디스크 시스템을 더 빠른 디스크 시스템으로 교체하는 것이 좋습니다.

PhysicalDisk\Avg. Disk Sec/Read 디스크에서 데이터를 읽는 데 걸리는 평균 시간(초)을 측정합니다. 값이 25ms(밀리초)보다 크면 디스크에서 읽을 때 디스크 시스템에 지연 현상이 발생하고 있음을 의미합니다. SQL Server® 및 Exchange Server를 호스팅하는 중요 업무 서버의 경우 허용 가능한 임계값은 10ms 미만입니다. 여기에서 가장 현명한 해결책은 현재 디스크 시스템을 더 빠른 디스크 시스템으로 교체하는 것입니다.

PhysicalDisk\Avg. Disk Sec/Write 디스크에 데이터를 쓰는 데 걸리는 평균 시간을 측정합니다. 이 시간이 25ms보다 크면 디스크에 쓸 때 디스크 시스템에 지연 현상이 발생하고 있음을 의미합니다. SQL Server 및 Exchange Server를 호스팅하는 중요 업무 서버의 경우 허용 가능한 임계값은 10ms 미만입니다. 여기에서 현명한 해결책은 디스크 시스템을 더 빠른 디스크 시스템으로 교체하는 것입니다.

PhysicalDisk\Avg. Disk Queue Length 얼마나 많은 I/O 작업이 하드 드라이브를 사용할 수 있을 때까지 대기하고 있는지 나타냅니다. 여기에서 값이 스핀들 수 + 2보다 크면 디스크 자체에 병목 현상이 있음을 의미합니다.

Memory\Cache Bytes 파일 시스템 캐시에 사용되고 있는 메모리의 양을 나타냅니다.                    이 값이 200MB보다 크면 디스크 병목 현상이 발생할 수 있습니다.

● 메모리 병목 현상

   메모리 부족은 대체로 RAM 부족, 메모리 누수 또는 boot.ini의 메모리 스위치 등으로 인해 발생합니다. 메모리 카운터를 소개하기 전에 먼저 /3GB 스위치에 대해 설명하겠습니다.메모리가 많을수록 디스크 I/O 작업이 줄고 응용 프로그램 성능이 높아집니다. /3GB 스위치는 사용자 모드 프로그램에 더 많은 메모리를 제공하기 위한 방법으로 Windows NT®에서 도입되었습니다.

  4GB의 가상 주소 공Windows에서는 간을 사용하며 이는 시스템의 물리적 RAM과는 무관합니다. 기본적으로 하위 2GB는 사용자 모드 프로그램을 위해 사용되고, 상위 2GB는 커널 모드 프로그램을 위해 사용됩니다. /3GB 스위치를 사용하면 사용자 모드 프로세스에 3GB가 제공됩니다. 그러면 물론 커널 메모리가 가상 주소 공간의 1GB만 남게 되므로 영향을 받습니다. 이 경우 페이징되지 않은 바이트 풀링, 페이징된 바이트 풀링, 사용 가능한 시스템 페이지 테이블 항목 및 데스크톱 힙이 모두 이 1GB 공간 안에 들어가야 하므로 문제가 발생할 수 있습니다. 따라서 /3GB 스위치는 해당 환경에서 충분한 테스트를 거친 후에만 사용해야 합니다. 메모리 관련 병목 현상이 발생하는 경우 이 스위치를 의심해 볼 수 있습니다. /3GB 스위치가 문제의 원인이 아니라면 다음 카운터를 사용하여 잠재적인 메모리 병목 현상을 진단할 수 있습니다.

Memory\% Committed Bytes in Use 커밋된 바이트와 커밋 한도의 비율, 즉 가상 메모리의 사용량을 측정합니다. 이 값이 80%보다 크면 메모리가 부족함을 나타냅니다. 이 경우 확실한 해결책은 메모리를 추가하는 것입니다.

Memory\% Available Mbytes 프로세스 실행을 위해 사용할 수 있는 실제 메모리의 양(메가바이트)을 측정합니다. 이 값이 총 물리적 RAM의 5%보다 작으면 메모리가 부족함을 나타내며 이로 인해 페이징 작업이 늘어날 수 있습니다. 이 문제를 해결하려면 메모리를 추가해야 합니다.

Memory\Free System Page Table Entries 시스템에서 현재 사용되지 않는 페이지 테이블 항목의 수를 나타냅니다. 이 숫자가 5,000보다 작으면 메모리 누수가 있을 수 있습니다.

Memory\Pool Non-Paged Bytes 페이징되지 않은 풀의 크기(바이트)를 측정합니다. 디스크에 쓸 수 없고 대신 실제 메모리에 남아 있어야 하는 할당된 개체에 대한 시스템 메모리 영역입니다. 이 값이 175MB(또는 /3GB 스위치의 경우 100MB)보다 크면 메모리 누수 가능성이 있습니다. 일반적인 이벤트 ID 2019가 시스템 이벤트 로그에 기록됩니다.

Memory\Pool Paged Bytes 페이징된 풀의 크기(바이트)를 측정합니다. 사용되고 있지 않을 때 디스크에 쓸 수 있는 개체에 대한 시스템 메모리 영역입니다. 이 값이 250MB(또는 /3GB 스위치의 경우 170MB)보다 크면 메모리 누수 가능성이 있습니다. 일반적인 이벤트 ID 2020이 시스템 이벤트 로그에 기록됩니다.

Memory\Pages per Second 하드 페이지 결함을 해결하기 위해 디스크에서 페이지를 읽거나 쓰는 속도를 측정합니다. 과도한 페이징으로 인해 이 값이 1,000보다 크면 메모리 누수 가능성이 있습니다.

● 프로세서 병목 현상

   프로세서 병목 현상은 프로세서 자체의 성능이 나빠서 발생하거나 비효율적인 응용 프로그램으로 인해 발생할 수 있습니다. 실제 메모리 부족으로 인해 프로세서가 페이징에서 많은 시간을 보내지 않는지 다시 확인해야 합니다. 잠재적인 프로세서 병목 현상을 조사할 때 Microsoft Service Support 엔지니어는 다음 카운터를 사용합니다.

Processor\% Processor Time 프로세서가 비유휴 스레드 실행에 소비하는 경과 시간의 백분율을 측정합니다. 이 백분율이 85%보다 크면 프로세서에 병목 현상이 발생하고 서버에 더 빠른 프로세서가 필요할 수 있습니다.

Processor\% User Time 프로세서가 사용자 모드에서 소비하는 경과 시간의 백분율을 측정합니다. 이 값이 높으면 서버에서 응용 프로그램이 많이 실행되고 있음을 나타냅니다. 한 가지 가능한 해결책은 프로세서 리소스를 많이 사용하는 응용 프로그램을 최적화하는 것입니다.

Processor\% Interrupt Time 지정된 샘플 간격 중 프로세서가 하드웨어 인터럽트 수신 및 서비스 제공에 소비하는 시간을 측정합니다. 이 값이 15%보다 크면 하드웨어 문제일 수 있습니다.

System\Processor Queue Length 프로세서 큐의 스레드 수를 나타냅니다. 이 값이 일정 기간 동안 CPU 수 x 2보다 크면 서버에 프로세서 성능이 부족한 것입니다.

● 네트워크 병목 현상

   네트워크 병목 현상은 네트워크에서 데이터를 송수신하는 서버의 성능에 영향을 미칩니다. 서버의 네트워크 카드에 문제가 있을 수 있거나, 네트워크가 포화 상태여서 분할해야 할 수 있습니다. 다음 카운터를 사용하여 잠재적인 네트워크 병목 현상을 진단할 수 있습니다.

Network Interface\Bytes Total/Sec 프레이밍 문자를 포함하여 각 네트워크 어댑터를 통해 보내고 받는 바이트의 비율을 측정합니다. 인터페이스의 70% 이상이 사용되면 네트워크가 포화 상태입니다. 100Mbps NIC의 경우 사용되는 인터페이스는 8.7MB/초입니다(100Mbps = 100000kbps = 12.5MB/초* 70%). 이와 같이 포화 상태이면 더 빠른 네트워크 카드를 추가하거나 네트워크를 분할해야 할 수 있습니다.

Network Interface\Output Queue Length 출력 패킷 큐의 길이(패킷)를 측정합니다. 이 값이 2보다 크면 네트워크가 포화 상태입니다. 이 문제는 더 빠른 네트워크 카드를 추가하거나 네트워크를 분할하여 해결할 수 있습니다.

● 프로세스 병목 현상

   제대로 작동하지 않는 프로세스나 최적화되지 않은 프로세스가 있으면 서버 성능이 크게 저하될 수 있습니다. 스레드 및 핸들 누수는 결국 서버 다운으로 이어지고, 과도한 프로세서 사용은 서버 속도를 저하시킵니다. 다음 카운터는 프로세스 관련 병목 현상을 진단할 때 유용합니다

Process\Handle Count 프로세스로 현재 열린 총 핸들 수를 측정합니다. 이 값이 10,000보다 크면 핸들 누수 가능성이 있습니다.

Process\Thread Count 프로세스에서 현재 활성 스레드 수를 측정합니다. 이 값이 최소 및 최대 스레드 수 사이에서 500보다 크면 스레드 누수 가능성이 있습니다.

Process\Private Bytes 다른 프로세스와 공유할 수 없는 이 프로세스에 할당된 메모리의 양입니다. 이 값이 최소 및 최대 스레드 수 사이에서 250보다 크면 메모리 누수 가능성이 있습니다.

[메모리 카운터]

Countor

설 명

의 미

Memory: Available Byte

서버에서 현재 사용할 수 있는 메모리를 기록한다.

낮은 값은 서버에 메모리가 부족하거나 특정 프로그램이 메모리 누수를 발생시키고 있다고 볼 수도 있다(특히 이 숫자가 지속적으로 줄어들 경우).

설명에 나온글
able Bytes는 컴퓨터에서 실행되는 프로세스에 할당하거나 시스템에서 사용할 수 있는 실제 메모리의 양(바이트)입니다. 이것은 대기 중이거나 비어 있거나 0으로 채워진 페이지 목록에 할당된 메모리의 총계입니다. 메모리 관리자에 대한 자세한 내용은 MSDN 및/또는 Windows Server 2003 Resource Kit의 System Performance and Troubleshooting Guide 장을 참조하십시오.

Memory: Commit Limit

페이징 파일을 확장하지 않고 사용할 수 있는 메모리의 최대량을 기록한다.

페이징 파일을 확장하는 것은 비효율적인 작업이기 때문에 가능하면 최소화되도록 한다. 아니면 페이징 파일을 원하는 만큼 크게 설정한다.

설명에 나온글
Commit Limit는 페이징 파일을 확장할 필요 없이 커밋될 수 있는 가상 메모리 크기(바이트 단위)입니다. 커밋된 메모리는 디스크 페이징 파일에 예약된 실제 메모리 공간입니다. 각 논리 드라이브에 하나의 페이징 파일이 있을 수 있습니다. 페이징 파일이 확장되면 이 제한도 따라서 증가합니다. 이 카운터는 최근에 관찰된 값만 표시하며 평균값은 아닙니다.

Memory: Commit Bytes

서버에서 실행되고 있는 프로세스들이 사용하고 있는 메모리의 양을 기록한다.

현재 사용되고 있는 RAM의 양을 가리키는데, 테이터가 디스크에 반드시 페이지되어야 하는 경우에는 페이지 파일에 같은 크기만큼의 공간이 필요하다. 그래서 사용되는 메모리이며 다른 프로세스가 사용할 수 없기 때문에 예약도 불가능하다.

설명에 나온글
Committed Bytes는 커밋된 가상 메모리의 양(바이트)입니다. 커밋된 메모리는 디스크 페이징 파일을 디스크에 다시 써야 할 필요가 있을 경우를 위해 예약된 실제 메모리입니다. 각 실제 드라이브에 하나 이상의 페이징 파일이 있을 수 있습니다. 이 카운터는 최근에 관찰된 값만 표시하며 평균값은 아닙니다.

Memory: Pages Input/sec

페이지 부재를 해결하기 위해 페이징 파일에서 RAM으로 데이터 페이지를 쓰는 속도를 기록한다.

이 값은 하드 페이지 부재 오류(hard page fault)를 나타내는 것이기 때문에(얼마나 자주 디스크에서 데이터를 가지고 오는지 측정할 수 있는 좋은 방법이다.

Pages Input/sec는 하드 페이지 폴트를 해결하기 위해 디스크에서 페이지를 읽은 비율입니다. 하드 페이지 폴트는 프로세스가 해당 작업 집합에 없거나 실제 메모리의 어딘가에 있는 가상 메모리의 페이지를 참조할 때 발생하며, 디스크에서 검색해야 합니다. 페이지 폴트가 발생하면 시스템이 연속된 여러 페이지를 메모리로 읽어 읽기 연산의 성능을 최대화합니다.

Memory: Pages Output/sec

RAM의 공간을 만들기 위해 데이터 페이지를 페이지 파일에 쓰는 속도를 기록한다.

서버가 평소보다 더 느리게 동작하는 것처럼 보이면 이 카운터를 모니터 한다. 이 값이 높으면 서버에 어플리케이션을 지원할 만큼의 충분한 메모리 공간이 없다는 것을 말한다.

Pages Output/sec는 실제 메모리의 공간을 비우기 위해 디스크에 다시 쓴 페이지의 비율입니다. 페이지는 실제 메모리에서 변경될 때만 디스크에 쓰므로 코드가 아닌 데이터를 갖고 있을 것입니다. 페이지 출력 비율이 높으면 메모리 부족을 의미할 수 있습니다. Windows에서는 실제 메모리가 적게 공급될 때 더 많은 페이지를 디스크에 써서 공간을 비웁니다. 이 카운터는 페이지 수를 표시하며 변환 없이 다른 페이지 수와 비교할 수 있습니다.

Memory: Pages/sec

하드 페이지 부재 오류를 해결하기 위해 페이지가 디스크에서 물리적인 메모리로 쓰여지거나 RAM의 빈 공간을 만들기 위해 디스크로 페이지를 옮겨 쓰는 속도를 기록한다.

값이 초당 20페이지가 넘어서면 페이징이 많다는 것을 의미하며, 서버에 더 많은 메모리가 필요하다는 의미이다.

Pages/sec는 하드 페이지 부재를 해결하기 위해 디스크에서 읽거나 디스크로 쓴 페이지의 비율입니다. 이 카운터는 시스템 전반적으로 지연을 일으키는 이러한 부재 오류의 주요 표시기입니다. 이것은 Memory\\Pages Input/sec과 Memory\\Pages Output/sec의 합입니다. 이것은 페이지 수로 계산되므로 Memory: Page Faults/sec 등과 같은 다른 페이지 수와 변환 없이 비교할 수 있습니다. 이것은 파일 시스템 캐시(일반적으로 응용 프로그램이 요청한) 및 비 캐시의 매핑된 메모리 파일에서 부재를 해결하기 위해 검색된 페이지를 포함합니다.

Paging File: % Usage

페이징 파일 사용량의 최대 크기를 기록한다.

이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.

사용하고 있는 Page File 인스턴스 양을 백분율로 표시한 것입니다. Process\\Page File Bytes 참조

Paging File: Usage Peak

페이징 파일 사용량의 최대 크기를 기록한다.

이 값이 페이징 파일의 최대 크기에 가까이 가면 페이징 파일을 늘리거나 RAM을 추가해야 한다. 높은 수치는 페이징 파일이 모든 데이터를 포함할 만큼 충분히 크지 못하다는 의미이다.

페이지 파일 인스턴스의 피크 사용을 백분율로 표시한 것입니다. Process\\Page File Bytes Peak 참조

Physical Disk: % Disk Time

디스크가 읽고 쓰는 요청을 처리하는데 사용되는 시간을 퍼센트로 기록한다.

이 값이 Memory: Page Read/sec이 늘어남과 동시에 함께 늘어난다면 페이징 파일이 많이 사용되고 있다는 의미이다. 페이징 파일이 위치한 물리적 디스크에 대해 이 값을 모니터 한다.

% Disk Time은 선택한 디스크 드라이브가 읽기 또는 쓰기 요청을 처리하는데 사용된 시간의 백분율입니다.

Physical Disk:

Avg Disk sec/Transfer

데이터를 디스크에 전송하는데 걸리는 시간을 기록한다.

페이징 파일이 위치한 물리적 디스크에 대해 이 값을 모니터 하면 디스크의 응답 시간을 확인할 수 있다. 이 정보를 이용해 더 빠른 디스크를 찾아 페이징 파일을 옮길 수 있다.

Avg. Disk Bytes/Transfer은 읽기 또는 쓰기 작업 동안 디스크로(또는 디스크에서) 전송되는 평균 바이트 수입니다

Process: Private Bytes

해당 프로세스가 사용하는 가상 메모리의 크기를 기록한다.

이 카운터는 하나의 프로세스가 사용하고 있는 메모리의 크기를 보여준다(모든 어플리케이션에 대한 유용한 정보이다). 특히 터미널 서버를 모니터하고 있는 경우 요청하는 어플리케이션을 클라이언트 쪽으로 옮기거나 전용 서버로 옮겨 다른 프로세스에 메모리가 부족하지 않게 한다.

Private Bytes는 이 프로세스가 할당하여 다른 프로세스와는 공유할 수 없는 메모리의 현재 크기(바이트)입니다.

Process: Working Set

프로세스가 데이터를 저장하기 위해 사용하는 RAM의 양을 기록한다. 작업 집합(working set)이 클수록 프로세스는 더 많은 메모리를 소비한다.

아무 작업을 하고 있지 않은데도 시간이 지나면서 작업 집합의 크기가 증가되면(예를 들면 1주일 동안) 해당 프로세스는 메모리 누수 현상을 일으키는 것일 수 있다.

Working Set는 이 프로세스에 대한 작업 집합의 현재 크기(바이트)입니다. 작업 집합은 프로세스의 스레드가 최근에 작업한 메모리 페이지의 집합입니다. 컴퓨터에 있는 빈 메모리가 한계를 초과하면 페이지는 사용 중이 아니라도 프로세스의 작업 집합에 남아 있습니다. 빈 메모리가 한계 미만이면 페이지는 작업 집합에서 지워집니다. 이 페이지가 필요하면 주 메모리에서 없어지기 전에 소프트 오류 처리되어 다시 작업 집합에 있게 됩니다.

[물리적 디스크 카운터]

Countor

설 명

의 미

Physical Disk: %Disk Time 물리적인 디스크가 사용되는 시간의 퍼센트를 기록한다. 이 값이 90퍼센트를 넘어서면 병목이다.(새로운 디스크를 이용하거나 사용량을 줄여 성능을 향상시킨다.)

Physical Disk: Current Disk Queue Length

지정된 물리적인 디스크(또는 선택한 모든 디스크)에 대기하고 있는 데이터 전송 작업의 현재 숫자를 기록한다. 이 값은 가능한 적어야 한다. 높은 값을 나타내면 디스크 대기 시간이 그만큼 늘어나 사용자들의 작업을 느리게 한다.

[네트워크 관련 카운터]

Countor

설 명

의 미

Server: Bytes Total/sec 서버가 네트워크 데이터를 송수신하는 속도를 기록한다. 초당 서버에서 송수신되는 총 바이트 수는 서버가 얼마나 바쁜지를 보여주는 좋은 지표가 된다. 서버에 걸려 있는 부하를 변경하기 위해 같은 종류의 서버를 추가하여 네트워크 부하를 분산시키는 것과 같이 어떤 작업을 하는 경우 작업의 성공 여부를 파악할 수 있다.

서버가 네트워크에서 주고 받은 바이트 수입니다.  이 값은 전반적인 서버의 사용 빈도를 나타냅니다.
Server: Files Open 측정시 열린 파일들의 숫자를 기록한다. 이 값은 주어진 시간 동안 열린 파일의 숫자의 합이 아니라 측정 순간의 총합을 나타낸다. 파일 서버에 걸려 있는 트래픽 부하를 보여준다. 하지만 사용자 단위 혹은 파일 단위로 볼 수는 없다.

현재 서버에서 열려있는 파일의 수입니다. 현재 서버의 동작을 나타냅니
Server: Pool Non-paged Failures 빈 페이지 풀은 페이징하는 과정에서 발생되는 오류의 숫자를 기록한다. 빈 페이지 풀은 호출이 되면 즉시 준비할 수 있게 하기 위해 디스크에 페이지될 수 없는 데이터의 가상 메모리 영역이다. 에러가 많이 발생하면 서버에 RAM을 늘려야 한다.

비페이지 풀에서 할당받지 못한 횟수입니다. 컴퓨터의 실제 메모리가 너무 작음을 나타냅니다.
Server: Server Sessions 서버에 대한 연결의 현재 숫자를 기록한다. 이 카운터는 서버가 얼마나 바쁜지를 보여주는 것은 아니지만 서버에 대한 연결이 얼마나 많은지 살펴볼 수 있다. 특히 누구도 액세스하지 말아야 하는 시간에 연결을 점검하는 용도로 사용될 수 있다.

현재 서버에서 활성화된 세션 수입니다. 현재 서버의 동작을 나타냅니다.
Network Interface: Bytes Total/sec

네트워크 카드가 네트워크 데이터를 송수신하는 속도를 기록한다.

속도가 네트워크와 네트워크 카드에 지정된 기대치에 너무 못 미치는 경우 카드가 제대로 동작하는지 검사해볼 수 있다.

Bytes Total/sec는 프레이밍 문자를 포함하여 각 네트워크 어댑터를 통해 보내고 받는 바이트의 비율입니다. Network Interface\\\\Bytes Received/sec은 Network Interface\\\\Bytes Received/sec와 Network Interface\\\\Bytes Sent/sec의 합입니다.

댓글 없음:

댓글 쓰기