OS X Server: 성능 평가하기

이 문서에서는 스크립트를 사용하여 Mac OS X Server v10.4 및 이후 버전을 실행 중인 서버의 성능 평가를 시작하는 방법을 설명합니다. 가장 중점을 두는 부분은 CPU, 디스크 저장 공간, 네트워킹과 같은 주요 리소스의 사용률을 확인하는 것입니다.

리소스 사용률

이 Perl 스크립트(이름: "top_guide.pl")를 사용하여 서버에서 시간 경과에 따른 주요 리소스의 사용률을 평가할 수 있습니다. 이 스크립트는 Mac OS X Server v10.4 및 이후 버전에서 작동합니다.

스크립트는 top -d를 실행하지만 시간이 지나면서 주요 리소스의 사용률을 추출하고 요약합니다. 인수가 없는 경우 top_guide.pl의 출력은 다음과 유사합니다.

-------- ----------- ------------ ------------- ------------- ------------- ------------- ------ CPU usage: 300-s Reads/sec: Writes/sec: Net in/sec: Net out/sec: kernel Time: user sys Idle avg. number MB number MB pkts Mb pkts Mb CPU% -------- ----- ----- ----- ----- ------ ------ ------ ------ ------ ------ ------ ------ ------ 08:44:36 0.1 0.1 99.8 99.8 0 0.0 0 0.0 11 0.0 0 0.0 0.4 08:44:46 0.1 0.3 99.6 99.8 0 0.0 0 0.1 12 0.0 0 0.0 0.4 08:44:56 0.0 0.2 99.8 99.8 0 0.0 0 0.0 17 0.0 0 0.0 0.4 08:45:06 0.0 0.2 99.8 99.8 0 0.0 0 0.0 6 0.0 0 0.0 0.4 08:45:16 0.0 0.2 99.8 99.8 0 0.0 0 0.0 9 0.0 0 0.0 0.4 08:45:26 8.7 24.6 66.7 98.6 43 0.8 98 0.6 803 1.0 1399 1.1 5.0 08:45:37 5.7 83.6 10.7 95.7 48 0.4 1085 116.9 95366 1053.1 61830 35.4 72.4 08:45:47 11.5 88.5 0.0 92.4 23 0.2 3228 426.9 337955 3843.6 207872 114.0 284.8 08:45:58 4.6 95.4 0.0 89.0 4 0.0 594 596.7 447499 5215.5 266449 140.9 370.0

CPU, 디스크 I/O, 네트워킹 이렇게 3가지 주요 영역으로 식별된 것을 확인할 수 있습니다. 각 영역에는 다음과 같은 열이 표시됩니다.

  • Time(시간): 가장 최근 요약 행의 종료 시간입니다. 기본적으로 샘플 간 간격은 10초입니다.

  • CPU usage: user(CPU 사용률: user): 사용자 모드의 CPU 사용률입니다. 이 값은 시스템에서 사용 가능한 총 CPU 리소스의 백분율입니다. 예를 들어, 8 프로세서 시스템에서 사용자 CPU가 50%인 경우 실행 중인 모든 응용 프로그램의 총 CPU 사용률이 프로세서 4개와 동등하다는 것을 의미합니다.

  • CPU usage: sys(CPU 사용률: sys): 사용 가능한 총 CPU의 백분율로 표시된 커널 모드의 CPU 사용률입니다.

  • Idle(대기 상태): 사용 가능한 총 리소스의 백분율로 표시된 대기 상태의 CPU입니다.

  • 300-s avg(300초 평균): 최근 300초 동안 사용되지 않은 CPU의 평활화된 백분율 평균입니다. (-roption을 사용하여 평균 간격을 조정하면 이 값이 변경되며, 열 제목도 그에 따라 적절히 변경됩니다.)

  • Reads/sec - number(읽기/초 - 수): 샘플 기간 동안 실행된 고유한 디스크 읽기 작업의 수입니다.

  • Reads/sec - Mb(읽기/초 - MB): 샘플 기간 동안 디스크에서 읽은 총 메가바이트입니다.

  • Writes/sec - number(쓰기/초 - 수): 샘플 기간 동안 실행된 고유한 쓰기 작업의 수입니다.

  • Writes/sec - Mb(쓰기/초 - MB): 샘플 기간 동안 쓰여진 총 메가바이트입니다.

  • Net in/sec - pkts(네트워크 입력/초 - pkts): 샘플 기간 동안 수신된 총 패킷입니다.

  • Net in/sec - Mb(네트워크 입력/초 - Mb): 샘플 기간 동안의 총 네트워크 입력(초당 메가비트)입니다.

  • Net out/sec - pkts(네트워크 출력/초 - pkts): 샘플 기간 동안 전송된 총 네트워크 패킷입니다.

  • Net out/sec - Mb(네트워크 출력/초 - Mb): 샘플 기간 동안의 총 네트워크 출력(초당 메가비트)입니다.

스크립트는 다음과 같은 옵션도 제공합니다.

  • -h: 전체 사용량 정보를 표시합니다.

  • -o filename: 탭으로 구분된 출력의 복사본을 파일에 삽입합니다. 이 출력 양식은 스프레드시트 및 다른 데이터 분석 스크립트로 가져오기에 적합합니다. 첫 번째 줄에는 출력이 항상 자체 설명이 되도록 열 헤더가 포함됩니다.

  • -d: 날짜 및 타임스탬프를 표시합니다. 이 옵션은 특히 관리자가 기록을 수집하려는 서버에서 장기간에 걸쳐 로깅을 수행할 때 유용합니다.

  • -S processNames: 단일 인스턴스 프로세스를 모니터링합니다. 이는 서버에서 특히 관심이 가는 특정 서비스에 단일 프로세스 ID만 있는 경우에 유용합니다. 주로 AFP Server로 사용되는 서버를 예로 들 수 있습니다. 이 경우 -S AppleFileServer를 인수로 사용하여 AppleFileServer 프로세스의 사용자 CPU 사용률에 대한 열을 별도로 추가합니다. 프로세스 이름을 쉼표로 구분하여 여러 개의 프로세스를 나열할 수 있습니다.

  • -M processNames: 여러 개의 프로세스를 사용하는 응용 프로그램에 사용된다는 점을 제외하고 -S와 유사합니다. 연결당 하나씩 있는 smbd가 그 예에 해당합니다. Samba에 많은 리소스를 사용하는 시스템에서는 -M smbd를 사용하여 모든 Samba 활동의 사용자 CPU가 요약된 열을 가져옵니다.

서버 성능을 완전히 분석하는 것은 이 문서의 범위가 아니지만, top_guide.pl의 출력은 시스템의 CPU, 디스크, 네트워크 리소스 사용량에 대한 요약을 제공합니다. 관리자는 이를 시스템의 하드웨어 및 부하와 비교하여 더 상세히 조사할 영역을 결정할 수 있습니다. 각 영역을 조사할 때 도움이 될 수 있는 몇 가지 추가 도구가 아래에 설명되어 있습니다.

CPU 사용률

CPU 사용률이 높은 경우 조사가 가장 필요한 영역은 응용 프로그램의 효율성 개선입니다. 이는 본 문서의 범위가 아니지만, 간혹 CPU가 사용되지 않는 경우가 있습니다. 더 높은 부하를 처리하기에 충분한 네트워크 및 디스크 리소스가 있지만 상당량의 CPU가 대기 상태로 남아 있는 상황을 조사하는 데 유용한 몇 가지 도구가 제공됩니다.

CPU가 충분히 사용되지 않을 수 있는 두 가지 상황은 다음과 같습니다.

  • 응용 프로그램 스레드 잠금

  • 커널 리소스 잠금

Mac OS X 10.5 Leopard에서 도입된 plockstat(1) 명령을 특정 응용 프로그램에 대해 실행하여 pthread 잠금 경합을 조사할 수 있습니다. top -d 출력에서 컨텍스트 전환 수(CSW 열)가 많은 프로세스를 조사하여 pthread 잠금 경합 가능성이 있는 프로세스를 식별할 수 있습니다. pthread 잠금 경합을 조사할 프로세스가 식별되면 # plockstat -C -e 10 -p 를 사용합니다.

Mutex block Count nsec Lock Caller ------------------------------------------------------------------------------- 8540 29622 0x805eb0 a.out`process_request+0x3d1 8361 28284 0x805eb0 a.out`release_block+0xac R/W reader block Count nsec Lock Caller ------------------------------------------------------------------------------- 1 3014987 0xa781e8 a.out`key_find+0x121 5 78831 0xa3d158 a.out`key_find+0x121 2 120532 0xa3d158 a.out`key_delete+0x137 R/W writer block Count nsec Lock Caller ------------------------------------------------------------------------------- 10 5336318 0xa781e8 a.out`key_replace+0x80 13 3827632 0xa75fe8 a.out`key_replace+0x80 3 3644946 0xa5fde8 a.out`key_create+0x37 6 161055 0xa3d158 a.out`key_replace+0x80 1 785267 0xa37758 a.out`key_create+0x37

이 출력을 검사하여 다양한 잠금에서 차단된 nsec의 총량을 확인할 수 있습니다. 이 값이 총계보다 높으면 실행 시간이 잠금 경합의 영향을 받고 있는 것입니다. 이 정보는 응용 프로그램 작성자가 응용 프로그램의 성능을 가려내고 개선하는 데 도움이 될 수 있습니다. 기호를 사용할 수 있는 경우 Caller(호출자) 필드에 차단된 함수의 기호 이름이 포함됩니다. 또한 총 차단 횟수가 초당 약 250회 이상으로 높은 경우, 스레드 간 조정으로 인해 효율성에 손실이 있는 것입니다. 성능을 제한하는 요인이라고 결론을 내리기에는 충분하지 않지만, 차단율이 높으면 응용 프로그램의 효율성이 충분히 발휘되지 않고 있음을 나타내는 경우가 많기 때문에 반드시 조사가 필요합니다.

리소스 경합 문제가 커널 내의 리소스에 적용되는 경우도 있습니다. Mac OS X 커널은 커널 뮤텍스와 읽기-쓰기 잠금으로 대부분의 멀티스레드 리소스를 관리합니다. 뮤텍스 경합은 다음과 같은 dtrace(1M) 스크립트를 통해 평가할 수 있습니다.

lockstat:::adaptive-block { @often[arg0, stack(5)] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); }

이 스크립트는 정렬된 목록을 프린트합니다( 5초 샘플링 후에 프린트되는 각 출력 블록 하단에 가장 경합이 심한 잠금 및 경로가 표시됨). 출력 샘플은 다음과 같습니다.

375517140 mach_kernel`lck_mtx_lock_wait_x86+0x1c7 mach_kernel`lck_mtx_lock+0x217 mach_kernel`ip_output_list+0xd34 mach_kernel`tcp_setpersist+0x18b mach_kernel`tcp_output+0x17a0 0 375571960 mach_kernel`lck_mtx_lock_wait_x86+0x1c7 mach_kernel`lck_mtx_lock+0x217 mach_kernel`vnode_ref+0x32 mach_kernel`fcntl_nocancel+0x4b3 mach_kernel`unix_syscall64+0x26d 0

이 경우, 스크립트는 375517140의 커널 뮤텍스가 tcp_output()이 ip_output_list()를 호출하고 그로 인해 tcp_setpersist()가 호출되는 경로를 통해 차단되고 있음을 보고하고 있습니다. 이 두 잠금 모두에서 초당 차단 횟수가 0이므로, 잠금 경합은 문제가 되지 않습니다. 이 형태의 스크립트는 단일 잠금의 모든 인스턴스를 합산하지는 않는다는 점에 유의하십시오. 스크립트가 다음과 같이 변경된 경우,

lockstat:::adaptive-block { @often[arg0] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); }

출력은 다음과 같이 바뀔 수 있습니다.

1301055072 9 1417504384 9 353318336 10 359381776 10 1301055088 11 5387344 165

이는 커널 주소 5387344의 잠금에만 상당한 경합이 있음을 나타내지만, 그래도 250 미만이기 때문에 우려할 수준은 아닙니다.

마지막으로, 스크립트를 다음과 같이 약간 변경하여 커널 읽기-쓰기 잠금에 중점을 둘 수 있습니다.

lockstat:::rw-block { @often[arg0, stack(4)] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); clear(@often); }

dtrace(1M) lockstat 스크립트 및 plockstat(1)의 사용에 관해 기억해야 할 사항:

  • 잠금 통계 수집은 성능에 영향을 미칩니다. 이러한 도구로 인해 시스템 속도가 느려질 수 있습니다. 따라서 도구를 주의해서 실행하고 이 성능 영향이 정상 작동 중에는 없는 경합을 추가한다는 점을 기억하십시오.

  • 일부 설계는 단순한 잠금 차단으로 인해 영향을 받지 않습니다. 매우 느리게 변경되는 리소스에 대해 잠금을 고려해 보십시오. 이러한 리소스를 관리하는 데 잠금을 사용하도록 선택할 수 있습니다. 이 잠금은 장시간 실행되는 작업이 완료될 때까지 그대로 남아서 대기할 수 있습니다.

이러한 인스턴스는 대기 시간이 길어지더라도 실제로 성능을 저하시키지 않습니다.

디스크 사용률

iopending(1)은 I/O 대기열 심도를 대기열 심도의 히스토그램으로 표시합니다. 예를 들면 다음과 같습니다.

2008 May 21 10:35:26, load: 0.99, disk_r: 0 KB, disk_w: 392 KB

value ------------- Distribution ------------- count < 0 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 9298 1 | 12 2 | 5 3 | 4 4 | 2 5 | 3 6 | 2 7 | 2 8 | 3 9 | 2 10 | 3 11 | 2 12 | 2 13 | 2 14 | 2 15 | 0

이는 약간의 디스크 활동을 나타내지만, 거의 모든 I/O 대기열의 심도가 0이므로 문제가 되지 않습니다. 또한 iopending을 사용하여 특정 디스크나 파일 시스템 볼륨에 중점을 둘 수 있습니다. 예를 들어 /Volumes/MyRAID에 중점을 두려면 iopending -m MyRAID를 사용합니다.

마지막으로, 특정 프로세스에 I/O를 속성으로 지정하고 fs_usage(1)을 사용하여 레이턴시를 평가할 수 있습니다. Shark 및 fs_usage(1)에 대한 자세한 내용은 이 개발자 연결 문서에서 확인할 수 있습니다.

네트워크 사용률

많은 서버에는 여러 네트워크 인터페이스와 다양한 네트워크상 거리에 있는 클라이언트가 존재할 수 있습니다. 따라서 성능 분석이 복잡할 수 있습니다. 그러나 LAN을 사용하는 경우, 즉 알려진 속도의 네트워크를 통해 클라이언트가 직접 연결되어 있는 상황에서는 top_guide.pl 및 netstat -i가 보고하는 측정 수치를 통해 얼마나 많은 용량이 사용되는지에 대한 정보를 얻을 수 있습니다. 해당 수치를 해석할 때 다음 지침을 참고합니다.

기가비트 네트워크 - 전이중, 1500바이트 MTU

최대 속도 - 소형 패킷: 1488Kpps 762Mbps

최대 패킷 속도 - 1500바이트 패킷: 81Kpps 987Mbps

(Kpps = 1000 패킷/초)

네트워크 성능을 분석할 때 netstat -s 출력에 과도한 패킷 재전송 비율 같은 문제가 있는지 검토하는 것도 유용합니다(이 문서의 범위가 아님).

더 알아보기

  • 파일 시스템 사용량 모니터링에 대한 자세한 내용은 Examining File System Usage(파일 시스템 사용량 조사하기)를 참조하십시오.

  • Shark 시간 프로파일링 도구에 대한 자세한 내용은 Shark User Guide(Shark 사용 설명서)를 참조하십시오.

  • Dtrace 사용 방법에 대한 자세한 내용은 How To Use Dtrace(Dtrace 사용 방법)를 참조하십시오.

Apple이 제조하지 않은 제품에 관한 정보 또는 Apple의 관리 또는 테스트 대상이 아닌 독립적인 웹 사이트는 권장 또는 보증 없이 제공되는 것입니다. Apple은 타사 웹 사이트 또는 제품에 대한 선택, 성능 및 사용과 관련하여 발생하는 결과에 대해 책임을 지지 않습니다. Apple은 타사 웹 사이트의 정확성 또는 신뢰도에 대해 어떠한 언급도 하지 않습니다. 자세한 내용은 해당 업체에 문의하시기 바랍니다.

게시일: