소개
이 테크 팁은 두가지 스크립트를 제공합니다: checkperf 와 runqueue.d. checkperf 스크립트는 솔라리스9 혹은 10에서 실행됩니다. runqueue.d 스트립트는 솔라리스10에서 동작 합니다.
-
다음의 링크에 checkperf 스크립트의 소스 코드 가 있습니다. 이 파일의 확장자를
.txt확장자에서.sh로 변경하시기 바랍니다. -
다음의 링크에
runqueue.d스크립트의 소스 코드 . 이 파일의 확장자를.txt확장자에서.d로 변경하시기 바랍니다.
checkperf 유틸리티는 CPU, 메모리, I/O, 네트워크 TCP 등의 시스템 퍼포먼스를 확인 합니다. 기본적인 주의 임계점은 각각의 항목들마다 변경될 수 있습니다. 개중 하나의 임계점이라도 도달하였다면 checkperf 는 지정된 수신자에게 주의 이메일을 전송 합니다. 이메일은 시스템의 퍼포먼스를 향상시키는 제안사항을 포함하고 있을 것입니다.
checkperf 와 cron 을 같이 사용함으로써 각각의 시스템을 수동으로 돌아다니면서 실행할 필요가 없습니다. checkperf 는 비지니스 시간중에서도 실행되도록 스케줄링 될 수 있습니다. checkperf 는 시스템 퍼포먼스에 영향을 주지 않을 것입니다. 기본적으로 sar 를 이용해서 5분 동안 매 5초 마다 통계 정보를 수집 합니다.
sar 가 정보를 수집할 수 있는 최소 간격은 1초 입니다. 만약 시스템이 수 많은 프로세스들을 실행하고 있어서 실행하는데에 수밀리초가 걸린다면 sar 는 그들이 런 큐에 있는지 알지 못할 것입니다. 그러므로 DTrace 가 시스템에 설치 되어 있다면(예를 들어 솔라리스10을 운용하고 있다면) checkperf 는 runqueue.d 를 이용하여 30 초간 매 밀리초간의 실행 큐의 정보를 수집할 것입니다.
이 테크팁의 남은 섹션은 checkperf 가 시스템이 다양한 퍼포먼스 이슈들을 가지고 있을때 반응하는지에 대해 설명 합니다. 계속 진행하기 전에 여러분은 checkperf 의 몇가지 매개변수들에 대해 알아야 합니다.:
-
DIR:checkperf와runqueue.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
에서 보실 수 있습니다.
"관리자코너" 카테고리의 다른 글
- 맥북 13인치 코어 2 듀오에 솔라리스10 설치하기 (댓글 2개 / 트랙백 0개) 2008/06/16
- 썬 버추얼 데스크탑 커넥터 1.0(베타)을 사용한 VDI 데모 구축 (댓글 0개 / 트랙백 0개) 2008/01/23
- 솔라리스 Tip Of The Week:SMF (댓글 0개 / 트랙백 0개) 2009/01/23
- GlassFish 를 프로덕션 환경으로 설치하기 (댓글 0개 / 트랙백 0개) 2009/11/23
- 솔라리스 레디 애플리케이션 및 솔루션 (댓글 0개 / 트랙백 0개) 2008/03/13
- 솔라리스 10 에서 TCP Wrapper 사용하기 (댓글 1개 / 트랙백 0개) 2006/01/23
- 시만텍 베리타스 넷백업과 ZFS 스냅샷 통합하기 (댓글 0개 / 트랙백 0개) 2009/07/17
- ZFS, 썬의 최신 파일 시스템(Part 1: 스토리지 무결성, 보안성 및 확장성) (댓글 3개 / 트랙백 1개) 2006/11/23
- USB로 부팅하기 - 설치 (댓글 31개 / 트랙백 1개) 2007/08/20
- 파일과 디렉토리를 안전하게 옮기거나 카피 할 수 있는 방법 (댓글 6개 / 트랙백 0개) 2007/04/23
댓글을 달아 주세요