일하는/Cloud, Web

[Testing][웹 서버 성능 테스트 도구] Apache Bench

김논리 2021. 11. 11. 16:19

https://httpd.apache.org/docs/2.4/programs/ab.html

 

ab - 아파치 웹서버 성능검사 도구 - Apache HTTP Server Version 2.4

ab - 아파치 웹서버 성능검사 도구 이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요. ab는 아파치 하이퍼텍스트 전송 프로토콜 (HTTP) 서버의 성능을 검사하는(benc

httpd.apache.org


  • License: Apache 2.0
  • Multithreaded: No
  • Scriptable: No
  • Written in: C

Install

다음 명령어를 이용하여 설치할 수 있다.

# Debian/Ubuntu
sudo apt install apache2-utils

# CentOS/RHEL
sudo yum install httpd-tools

# Mac OS
# default로 설치되어 있음

How to use

총 600개의 요청을 한번(동시 접속)에 10개씩 보내는 테스트를 진행하는 경우, 다음과 같이 사용하면 된다.

ab -n 600 -c 10 http://localhost:8000/api/ping

Flags

  • -n requests : 수행할 요청 수 (default 1)
  • -c concurrency : 한 번에 수행할 요청 수 (동시 접속자 수로, default 1)
  • -t timelimit : 테스트 최대 수행 시간(초단위). 정해진 시간 동안 테스트를 진행할 때 사용. (내부적으로 -n 50000을 가정하고 수행됨)
  • -s timeout : 각 요청의 최대 수행 시간(초단위). 정해진 시간을 초과하는 요청은 실패로 처리할 때 사용. (default 30초)
  • -p postfile : POST data가 포함된 파일을 설정한다. (-T 옵션도 함께 설정해야 함)
  • -u putfile : PUT dat가 포함된 파일을 설정한다. (-T 옵션도 함께 설정해야 함)
  • -T content-type : POST/PUT에 사용될 Content-Type 헤더 값을 설정한다. (default는 'text/plain')
  • -H attribute : 헤더 값 설정
  • -m method : method 이름 설정
  • -g filename : 테스트 결과를 gnuplot 포맷의 파일로 기록한다.
  • -e filename : 테스트 결과를 누적 백분율 형태로 CSV 포맷의 파일로 기록한다.

Results

결과는 다음과 같은 형태로 확인 가능하다.

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

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Finished 600 requests


Server Software:        WSGIServer/0.2
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /api/ping
Document Length:        21 bytes

Concurrency Level:      10
Time taken for tests:   1.094 seconds                   # 전체 테스트 소요 시간
Complete requests:      600                             # 응답 완료된 요청 수
Failed requests:        0                               # 실패한 요청 수
Total transferred:      204000 bytes
HTML transferred:       12600 bytes
Requests per second:    548.44 [#/sec] (mean)           # 초당 응답 요청 수
Time per request:       18.233 [ms] (mean)              # 요청당 응답 시간
Time per request:       1.823 [ms] (mean, across all concurrent requests)
Transfer rate:          182.10 [Kbytes/sec] received    # 초당 전송량

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     4   18   2.1     18      27
Waiting:        2   15   1.9     15      22
Total:          4   18   2.1     18      27

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     20
  95%     21
  98%     22
  99%     23
 100%     27 (longest request)
POST method를 사용하여 데이터를 전송하고 싶은 경우, 다음과 같이 설정한다.
ab -T "application/json" \
   -p "data.json" \
   http://127.0.0.1:8000/api/post_data​

Report

gnuplot 이용하거나, 결과 값을 CSV로 export 한 다음, 엑셀에서 report를 생성할 수 있다.

gnuplot 대한 사용법은 아래 페이지에서 확인할 수 있다.

http://www.gnuplot.info/

 

gnuplot homepage

direct output to file: postscript (including eps), pdf, png, gif, jpeg, LaTeX, metafont, emf, svg, ...

www.gnuplot.info