소개

이 테크 팁은 두가지 스크립트를 제공합니다: checkperfrunqueue.d. checkperf 스크립트는 솔라리스9 혹은 10에서 실행됩니다. runqueue.d 스트립트는 솔라리스10에서 동작 합니다.

checkperf 유틸리티는 CPU, 메모리, I/O, 네트워크 TCP 등의 시스템 퍼포먼스를 확인 합니다. 기본적인 주의 임계점은 각각의 항목들마다 변경될 수 있습니다. 개중 하나의 임계점이라도 도달하였다면 checkperf 는 지정된 수신자에게 주의 이메일을 전송 합니다. 이메일은 시스템의 퍼포먼스를 향상시키는 제안사항을 포함하고 있을 것입니다.

checkperf 와 cron 을 같이 사용함으로써 각각의 시스템을 수동으로 돌아다니면서 실행할 필요가 없습니다. checkperf 는 비지니스 시간중에서도 실행되도록 스케줄링 될 수 있습니다. checkperf 는 시스템 퍼포먼스에 영향을 주지 않을 것입니다. 기본적으로 sar 를 이용해서 5분 동안 매 5초 마다 통계 정보를 수집 합니다.

sar 가 정보를 수집할 수 있는 최소 간격은 1초 입니다. 만약 시스템이 수 많은 프로세스들을 실행하고 있어서 실행하는데에 수밀리초가 걸린다면 sar 는 그들이 런 큐에 있는지 알지 못할 것입니다. 그러므로 DTrace 가 시스템에 설치 되어 있다면(예를 들어 솔라리스10을 운용하고 있다면) checkperfrunqueue.d 를 이용하여 30 초간 매 밀리초간의 실행 큐의 정보를 수집할 것입니다.

이 테크팁의 남은 섹션은 checkperf 가 시스템이 다양한 퍼포먼스 이슈들을 가지고 있을때 반응하는지에 대해 설명 합니다. 계속 진행하기 전에 여러분은 checkperf 의 몇가지 매개변수들에 대해 알아야 합니다.:

  • DIR: checkperfrunqueue.d 가 존재하는 디렉토리를 지정함 (예를 들어, /home/<username>/bin)

  • LOG: 생성된 주의 메세지들을 담을 파일을 지정함 (예를 들어, /home/<username>/bin/perf_msg)

  • RECEIVER: 주의 메세지들을 받을 사람의 이메일 주소를 지정함 (예를 들어, <username@domain.com>)

참고: 필자의 시스템은 32개의 CPU 를 가지고 있습니다. 테스트를 위해서 필자는 30개의 cpu 를 psradm -f 2-31 커맨드를 이용해서 비활성화 시켰습니다.

CPU 퍼포먼스 주의

checkperf 에서 CPU 퍼포먼스를 보고하기 위한 매개변수는 CPU_UTIL_WARN 이고 그것의 CPU 사용률 주의 임계점은 기본적으로 80으로 설정되어 있습니다.

만약 CPU 사용률이 80% 를 넘어 간다면 checkperf 는 실행 큐의 쓰레드들을 확인하고 시스템의 CPU 가 오프라인 상태인지 확인한 다음에 이메일을 발송 합니다.

dd if=/dev/zero of=/dev/null & 를 이용하여 CPU 자원을 소모할 수 있습니다:

root@host # dd if=/dev/zero of=/dev/null &
[1] 1571
root@host # dd if=/dev/zero of=/dev/null &
[2] 1572
root@host # dd if=/dev/zero of=/dev/null &
[3] 1573
root@host # dd if=/dev/zero of=/dev/null &
[4] 1574

root@host # sar -uq 5 3
15:21:25    %usr    %sys    %wio   %idle
         runq-sz %runocc swpq-sz %swpocc
Average       69      31       0       0
Average      2.0      99     0.0       0

root@host # ./checkperf

root@host # more perf_msg

CPU average utilization: 100%(>80%)
There are 30 CPUs offline and use psradm to bring them online
Threads (per second) waiting for CPU to run: 2.0.
Recommend adding 2.0 CPUs to your system. Use prstat -L to see
if running processes have multiple threads so that you may switch to
thread-based-processor machine, such as the Sun Fire T2000 server.
The accurate threads waiting for CPU: 2.1

"accurate threads waiting for CPU: 2.1" 문장은 runqueue.d 에 의해 생성된 문장으로 실행 큐에 대한 좀 더 정확한 정보를 제공 합니다.

메모리 부족 주의

checkperf 의 메모리 확인을 위한 두가지 파라미터가 존재 합니다:

  • MEM_FREEPHY_WARN_PERCENT: 사용 가능한 물리 메모리에 대한 주의 임계점이고 기본적으로 20으로 설정되어 있슴.
  • MEM_FREESWAP_WARN_PERCENT: 사용가능한 스왑 공간(가상 메모리)에 대한 주의 임계점으로 기본적으로 20으로 설정되어 있슴.

만약 사용가능한 스왑 공간이 20% 보다 더 적다면 checkperf 는 물리적 스왑 디바이스의 전체 사이즈가 물리 메모리의 1.5배 보다 적은지를 확인합니다. 필자의 이전 글 스왑 공간이 시스템 퍼포먼스에 미치는 영향, 에서 언급했듯이 물리 스왑 공간은 시스템이 물리적 메모리가 부족할때 시스템의 퍼포먼스에 영향을 줍니다.

여기서 우리는 myfilltmp.sh 스크립트 (위에서 언급한 이전글에서 사용된 스크립트) 를 이용해서 메모리를 소비할 것입니다:

root@host # ./myfilltmp.sh

root@host # sar -r 5 3
15:34:39 freemem freeswap
Average   122536  6180453

결과로 볼때 남은 메모리는 122536*8/1024, 즉 957 Mbytes 이고 남은 스왑 공간은 6180453*512/1024/1024, 즉 3017 Mbytes 입니다.

root@host # ./checkperf

root@host # more perf_msg

Available physical memory: 937 MB(<3275 MB)

Available swap space: 2956 MB(<3552 MB)

Recommend adding 20465 MB swap device. The total size
 of physical swap devices should be 1.5 times physical memory.

 

I/O 퍼포먼스 주의

checkperf 의 I/O 디바이스 활용율을 확인하기 위한 파라미터는 IO_UTIL_WARN, 이고 임계점은 기본적으로 80으로 설정되어 있습니다.

무거운 I/O 로드를 만들어 보겠습니다:

root@host # cp myusr.tar myusr.tar2

root@host # sar -d 5 5
Average    nfs1     0     0.0       0       0     0.0     0.0
           sd1     99     6.8     134   80513     0.0    51.0

root@host # ./checkperf

root@host # more perf_msg

IO utilization on sd1: 100%(>80%)

 

네트워크 퍼포먼스 주의

다음의 요소들은 TCP 퍼포먼스를 떨어 뜨립니다:

  • 재전송: 잃어버린 메세지들은 반드시 재전송 되어야 함.
  • 중복 패킷: 로컬 호스트는 만약 본래 요청이 타임아웃 되고, 다른 요청을 했으나, 그때 본래 요청에 대한 패킷을 받았을때 중복 패킷을 받게 될 것임.
  • Listen 큐: listen 큐는 서버의 처리량을 넘은 클라이언트의 요청이 들어 왔을때 증가 하게 됨.

checkperf 에서 재전송에 대한 주의 임계점은 15% 이고 중복 패킷 비율에 대한 임계점은 15% 입니다. listen 큐 드롭에 대한 주의 임계점은 100. 입니다. 만약 테스트 서버가 어떠한 재전송 메세지나 중복 패킷도 가지고 있지 않고 listen 큐 드롭이 100보다 크지 않다면 perf_msg file 은 비어 있을 것입니다.

한곳에 조합하기

마지막으로 CPU, 메모리, I/O 퍼포먼스 체크를 한곳에서 조합해 봅시다:

root@host # dd if=/dev/zero of=/dev/null &
root@host # dd if=/dev/zero of=/dev/null &
root@host # dd if=/dev/zero of=/dev/null &
root@host # dd if=/dev/zero of=/dev/null &

root@host # ./myfilltmp.sh

root@host # cp myusr.tar myusr.tar2

root@host # more perf_msg

CPU average utilization: 100%(>80%)
There are 30 CPUs offline and use psradm to bring them online
Threads (per second) waiting for CPU to run: 3.1.
Recommend to add 3.1 CPUs to your system. Use prstat -L to see
if running processes have multiple threads so that you may switch to
thread-based-processor machine, such as Sun Fire T2000 server.
The accurate threads waiting for CPU: 3.1


Available physical memory: 778 MB(<3275 MB)

Available swap space: 2821 MB(<3517 MB)

Recommend to add 20465 MB swap device. The total size  of physical
swap devices should be 1.5 times physical memory.

IO utilization on sd1: 51%(>30%)

CPU 활용률과 메모리의 부족으로 인하여 평균 디스크 활용율이 80%에 미치지 못했습니다. 필자는 IO_UTIL_WARN 을 30으로 감소 시켰습니다. 이 예제에서 우리는 CPU 와 메모리가 I/O 퍼포먼스에도 영향을 줄 수 있음을 볼 수 있습니다.


수정 사항

2008년 11월: 스크립트에서 다음의 항목이 변경 되었습니다:

MEM_TOTALPHY=`prtconf -vp | grep Memory | awk '{print $3}'`

위에서 아래로:

MEM_TOTALPHY=`prtconf -vp | grep "Memory size" | awk '{print $3}'`
 
이 글의 영문 원본은
Automating a System Performance Check Using the checkperf Utility
에서 보실 수 있습니다.
 

"관리자코너" 카테고리의 다른 글

2008/12/05 17:53 2008/12/05 17:53

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/687

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 172 173 174 175 176 177 178 179 180  ... 806  Next ▶