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.