Apache Bench-환경 설정

이 장에서는 VPS에서 Apache Bench에 대한 환경을 설정하는 방법을 안내합니다.

시스템 요구 사항

  • Memory − 128MB

  • Disk Space − 최소 요구 사항 없음

  • Operating System − 최소 요구 사항 없음

Apache Bench 설치

Apache Bench는 독립 실행 형 애플리케이션이며 Apache 웹 서버 설치에 종속되지 않습니다. 다음은 Apache Bench를 설치하는 2 단계 프로세스입니다.

Step 1 − 패키지 데이터베이스를 업데이트합니다.

# apt-get update

터미널 명령 앞에 # 기호는 루트 사용자가 해당 명령을 실행하고 있음을 의미합니다.

Step 2 − Apache Bench에 액세스하려면 apache2 utils 패키지를 설치하십시오.

# apt-get install apache2-utils

이제 Apache Bench가 설치되었습니다. 동일한 VPS에서 호스팅되는 웹 애플리케이션을 테스트하려면 Apache 웹 서버 만 설치하면됩니다.

# apt-get install apache2

Apache 유틸리티 인 Apache Bench는 Apache 웹 서버 설치시 자동으로 설치됩니다.

Apache Bench 설치 확인

이제 Apache Bench 설치를 확인하는 방법을 살펴 보겠습니다. 다음 코드는 설치를 확인하는 데 도움이됩니다.

# ab -V

Output

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

위의 터미널 출력이 표시되면 Apache Bench를 성공적으로 설치 한 것입니다.

권한이있는 Sudo 사용자 만들기

안전 관점에서 시스템 관리자가 루트로 작업하는 대신 sudo 사용자를 만드는 것이 좋은 방법으로 간주됩니다. 목적을 위해 test라는 이름의 테스트 사용자를 만듭니다.

# useradd -m -d /home/test -g sudo test

새 사용자의 비밀번호를 설정해 보겠습니다.

# passwd test

시스템은 사용자 테스트를 위해 새 암호를 입력하라는 메시지를 표시합니다. 테스트 중이며 프로덕션 서버에 배포하지 않으므로 간단한 암호를 입력 할 수 있습니다. 일반적으로 sudo 명령은 sudo 사용자 암호를 입력하라는 메시지를 표시합니다. 절차가 번거로워 지므로 복잡한 비밀번호는 사용하지 않는 것이 좋습니다.

Output

Enter new UNIX password:
Retype new UNIX password:   
passwd: password updated successfully

Apache.org 웹 사이트 테스트

이 섹션에서는 Apache.org 웹 사이트를 테스트합니다. 먼저 sudo 사용자 테스트로 전환 해 보겠습니다.

# su test

우선 Apache 조직의 웹 사이트를 테스트합니다. https://www.apache.org/. 먼저 명령을 실행 한 다음 출력을 이해합니다.

$ ab -n 100 -c 10 https://www.apache.org/

여기 -n벤치마킹 세션에 대해 수행 할 요청 수입니다. 기본값은 일반적으로 대표적이지 않은 벤치마킹 결과로 이어지는 단일 요청을 수행하는 것입니다.

-c동시성이며 한 번에 수행 할 여러 요청 수를 나타냅니다. 기본값은 한 번에 하나의 요청입니다.

따라서이 테스트에서 Apache Bench는 Apache 조직 서버에 동시성 10으로 100 개의 요청을 보냅니다.

Output

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.apache.org (be patient).....done

Server Software:        Apache/2.4.7
Server Hostname:        www.apache.org
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:          /
Document Length:        58769 bytes

Concurrency Level:      10
Time taken for tests:   1.004 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      5911100 bytes
HTML transferred:       5876900 bytes
Requests per second:    99.56 [#/sec] (mean)
Time per request:       100.444 [ms] (mean)
Time per request:       10.044 [ms] (mean, across all concurrent requests)
Transfer rate:          5747.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       39   46  30.9     41     263
Processing:    37   40  21.7     38     255
Waiting:       12   15  21.7     13     230
Total:         77   86  37.5     79     301

Percentage of the requests served within a certain time (ms)
  50%     79
  66%     79
  75%     80
  80%     80
  90%     82
  95%     84
  98%    296
  99%    301
 100%    301 (longest request)

첫 번째 테스트를 실행하면 다음과 같은이 명령의 사용 패턴을 쉽게 인식 할 수 있습니다.

# ab [options .....]  URL

어디,

  • ab − Apache Bench 명령

  • options − 수행하려는 특정 작업에 대한 플래그

  • URL − 테스트 할 경로 URL

출력 값 이해

ab가 반환하는 다양한 출력 값을 이해하려면 다양한 메트릭을 이해해야합니다. 여기에 목록이 있습니다-

  • Server Software − 첫 번째 성공적인 반환의 HTTP 헤더에 반환 된 웹 서버의 이름입니다.

  • Server Hostname − 명령 줄에 지정된 DNS 또는 IP 주소입니다.

  • Server Port− ab가 연결되는 포트입니다. 명령 줄에 포트가 지정되지 않은 경우 기본값은 http의 경우 80, https의 경우 443입니다.

  • SSL/TLS Protocol− 이것은 클라이언트와 서버간에 협상되는 프로토콜 매개 변수입니다. SSL을 사용하는 경우에만 인쇄됩니다.

  • Document Path − 이것은 명령 줄 문자열에서 구문 분석 된 요청 URI입니다.

  • Document Length− 첫 번째로 성공적으로 반환 된 문서의 크기 (바이트)입니다. 테스트 중에 문서 길이가 변경되면 응답은 오류로 간주됩니다.

  • Concurrency Level − 이것은 테스트 중에 사용 된 동시 클라이언트 (웹 브라우저와 동일)의 수입니다.

  • Time Taken for Tests − 첫 번째 소켓 연결이 생성 된 순간부터 마지막 ​​응답이 수신되는 순간까지 걸리는 시간입니다.

  • Complete Requests − 수신 한 성공적인 응답 수.

  • Failed Requests− 실패로 간주 된 요청 수. 숫자가 0보다 크면 연결, 읽기, 잘못된 콘텐츠 길이 또는 예외로 인해 실패한 요청 수를 표시하는 다른 줄이 인쇄됩니다.

  • Total Transferred− 서버에서 수신 한 총 바이트 수. 이 숫자는 기본적으로 유선을 통해 전송 된 바이트 수입니다.

  • HTML Transferred− 서버에서 수신 한 총 문서 바이트 수. 이 숫자는 HTTP 헤더에서받은 바이트를 제외합니다.

  • Requests per second− 이것은 초당 요청 수입니다. 이 값은 요청 수를 총 소요 시간으로 나눈 결과입니다.

  • Time per request− 요청 당 평균 소요 시간. 첫 번째 값은 공식 동시성 * timetaken * 1000 / done으로 계산되고 두 번째 값은 timetaken * 1000 / done 공식으로 계산됩니다.

  • Transfer rate − totalread / 1024 / timetaken 공식에 의해 계산 된 전송 속도.

부하 테스트 출력의 빠른 분석

ab 명령에서 출력 값의 제목에 대해 배웠으므로 초기 테스트의 출력 값을 분석하고 이해해 보겠습니다.

  • Apache 조직은 자체 웹 서버 소프트웨어를 사용하고 있습니다-Apache (버전 2.4.7)

  • 서버는 https 때문에 포트 443에서 수신 대기합니다. http 였다면 80 (기본값)이됩니다.

  • 전송 된 총 데이터는 100 개의 요청에 대해 58769 바이트입니다.

  • 테스트는 1.004 초 만에 완료되었습니다. 실패한 요청이 없습니다.

  • 초당 요청-99.56. 이것은 꽤 좋은 숫자로 간주됩니다.

  • 요청 당 시간-100.444ms (동시 요청 10 개) 따라서 모든 요청에서 100.444ms / 10 = 10.044ms입니다.

  • 전송 속도-1338.39 [Kbytes / sec] 수신.

  • 연결 시간 통계에서 많은 요청이 몇 초 동안 기다려야한다는 것을 알 수 있습니다. 이는 아파치 웹 서버가 대기 대기열에 요청을 넣었 기 때문일 수 있습니다.

첫 번째 테스트에서 우리는 다른 서버에서 호스팅되는 응용 프로그램 (예 : www.apache.org)을 테스트했습니다. 튜토리얼의 후반부에서는 ab 테스트를 실행할 동일한 서버에서 호스팅되는 샘플 웹 애플리케이션을 테스트 할 것입니다. 이것은 학습의 용이성과 데모 목적을위한 것입니다. 이상적으로는 정확한 측정을 위해 호스트 노드와 테스트 노드가 달라야합니다.

ab를 더 잘 배우려면이 튜토리얼을 진행하면서 출력 값이 다른 경우에 어떻게 다른지 비교하고 관찰해야합니다.

Apache Bench의 출력 플로팅

여기에서는 요청 수가 증가함에 따라 서버가 걸리는 시간을 확인하기 위해 관련 결과를 플로팅합니다. 이를 위해-g ab 출력 데이터가 저장 될 파일 이름 (여기서는 out.data)이 뒤 따르는 이전 명령의 옵션-

$ ab -n 100 -c 10 -g out.data https://www.apache.org/

이제 보자 out.data 플롯을 만들기 전에-

$ less out.data

Output

starttime       seconds ctime   dtime   ttime   wait
Tue May 30 12:11:37 2017        1496160697      40      38      77      13
Tue May 30 12:11:37 2017        1496160697      42      38      79      13
Tue May 30 12:11:37 2017        1496160697      41      38      80      13
...

이제 열 머리글을 이해하겠습니다. out.data 파일-

  • starttime − 이것은 통화가 시작된 날짜와 시간입니다.

  • seconds − 시작 시간과 동일하지만 Unix 타임 스탬프 형식 (날짜 -d @ 1496160697은 시작 시간 출력을 반환 함)입니다.

  • ctime − 이것이 연결 시간입니다.

  • dtime − 이것이 처리 시간입니다.

  • ttime − 이것은 총 시간입니다 (이는 ctime과 dtime의 합, 수학적으로 ttime = ctime + dtime).

  • wait − 이것이 대기 시간입니다.

이러한 여러 항목이 서로 어떻게 관련되어 있는지 그림으로 시각화하려면 다음 이미지를 살펴보십시오.

터미널에서 작업하거나 그래픽을 사용할 수없는 경우 gnuplot훌륭한 옵션입니다. 다음 단계를 통해 빠르게 이해할 수 있습니다.

gnuplot을 설치하고 실행 해 보겠습니다.

$ sudo apt-get install gnuplot  
$ gnuplot

Output

G N U P L O T
Version 4.6 patchlevel 6    last modified September 2014
Build System: Linux x86_64

Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others

gnuplot home:     http://www.gnuplot.info
faq, bugs, etc:   type "help FAQ"
immediate help:   type "help"  (plot window: hit 'h')

Terminal type set to 'qt'
gnuplot>

터미널에서 작업하고 그래픽을 사용할 수 없다고 가정 할 때 터미널 자체에 대해 ASCII로 출력을 제공하는 멍청한 터미널을 선택할 수 있습니다. 이렇게하면이 빠른 도구를 사용하여 플롯이 어떻게 생겼는지 알 수 있습니다. 이제 ASCII 플롯을위한 터미널을 준비하겠습니다.

gnuplot> set terminal dumb

Output

Terminal type set to 'dumb'
Options are 'feed  size 79, 24'

이제 gnuplot 터미널이 ASCII 플롯을 사용할 준비가되었으므로 out.data 파일-

gnuplot> plot "out.data" using 9  w l

Output

1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
       +      +      +     +      +      +      +"out.data" using 9 ****** +
       |                                                                   |
  1200 ++                       ********************************************
       |     *******************                                           |
  1000 ++    *                                                            ++
       |     *                                                             |
       |     *                                                             |
   800 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   600 ++   *                                                             ++
       |    *                                                              |
       |    *                                                              |
   400 ++   *                                                             ++
       |    *                                                              |
   200 ++   *                                                             ++
       |    *                                                              |
       +****  +      +     +      +      +      +      +     +      +      +
     0 ++-----+------+-----+------+------+------+------+-----+------+-----++
       0      10     20    30     40     50     60     70    80     90    100

요청 수와 관련하여 열 9의 ttime, 총 시간 (ms)을 표시했습니다. 처음 10 개의 요청에 대해 총 시간은 거의 100ms 였고 다음 30 개의 요청 (10 번째 에서 40 번째까지 )에 대해서는 1100ms로 증가했습니다. 당신의 플롯은 당신에 따라 달라야합니다out.data.