메뉴 닫기

Ubuntu 24.04에서 ab(ApacheBench)명령을 이용한 웹 서버 로딩 속도 테스트

안녕하세요. 오늘은 ab 명령을 이용한 웹 서버 로딩 속도 테스트를 진행해보려고 합니다.

웹 서버의 성능은 사용자의 경험 및 서비스의 안정성에 직접적인 영향을 미칩니다. 빠르고 안정적인 웹 서버는 더 나은 사용자 경험을 제공하며 비즈니스 성공의 중요한 요소 중 하나입니다. 그러나 웹 서버가 얼마나 효율적으로 동작하는지, 동시에 얼마나 많은 요청을 처리할 수 있는지 등을 정확하게 측정하는 것은 쉽지 않습니다.

이러한 문제를 해결하기 위해, ApacheBench(일반적으로 ab)라는 도구를 사용할 수 있습니다.

ApacheBench 는 웹 서버의 성능을 테스트하고 벤치마킹하는 데 널리 사용되는 도구로, 다양한 환경에서 서버의 응답 시간과 동시성 처리 능력을 측정할 수 있습니다.

목차

1. ab(ApacheBench) 소개

2. ab(ApacheBench)설치 및 설정

3. ab(ApacheBench) 사용법

4. ab(ApacheBench) 기본 테스트

5. 테스트 결과 분석

6. 부하 테스트

 

먼저 ab에 대해 간단히 정리하고 넘어가겠습니다.

1. ab(ApacheBench) 소개

  • ApacheBench웹 서버 성능 테스트벤치마킹을 위해 Apache Software Foundation에서 개발한 도구입니다.
  • ab라는 명령어로 실행되는 이 도구는 HTTP 서버의 응답 시간을 측정하고, 동시 요청을 통해 서버의 부하 처리 능력을 평가할 수 있습니다.

 

2. ab(ApacheBench)설치 및 설정

# apt update                                                                                -> 패키지 업데이트 먼저 진행.

# apt install apache2-utils -y                                                       -> apache2-utils 패키지에 포함되어있어, 이 패지지를 설치하면 됨.

 

3. ab(ApacheBench) 사용법 : ab 명령어의 기본 형식은 다음과 같음.

ab [options] [http[s]://]hostname[:port]/path

옵션

설명 및 예시

-n requests

실행할 총 요청 수. (예: -n 1000)

-c concurrency

동시에 실행할 요청 수. (예: -c 100)

-t timelimit

벤치마크 테스트를 실행할 최대 시간(초). 이 옵션 사용 시, -n 옵션은 무시됨.(예:-t 60)

-k

KeepAlive 옵션을 활성화. 연결을 유지함.

-H “Header: Value”

추가 헤더를 요청에 포함. 예: -H “Authorization: Bearer <token>”

 

4. ab(ApacheBench) 기본 테스트

※ URL의 끝에 슬래시 (/)가 있는지 여부는 중요한 경우가 많습니다.

웹 서버나 웹 애플리케이션이 슬래시 유무에 따라 다르게 동작할 수 있습니다. ab 명령어에서도 이를 고려해야 한다는 것을 주의하시기 바랍니다.

  • 리디렉션 : 일부 웹 서버는 슬래시가 없는 URL을 자동으로 슬래시가 있는 URL로 리디렉션합니다. 이는 추가적인 네트워크 요청을 발생시키고 벤치마킹 결과에 영향을 줄 수 있습니다.

  • 서버 설정: 서버가 슬래시 유무에 따라 다른 리소스를 제공하거나 다른 동작을 수행할 수 있습니다.

 

# ab -n 100 -c 10 http://huha.site/

100개의 요청을 10개씩 동시에 보내는 예시입니다.

 

5. 테스트 결과 분석

ab 명령어를 실행한 후, 출력 결과는 다음과 같은 정보를 포함합니다.

Concurrency Leve

동시 요청 수

Time taken for test

테스트 수행 시간

Complete requests

완료된 요청 수

Failed requests

실패한 요청 수

Requests per second

초당 요청 수 (서버의 처리 능력)

Time per request

요청당 소요 시간 (단일 요청에 대한 평균 응답 시간)

Transfer rate

초당 전송된 데이터 양

본격적으로 결과를 분석해보겠습니다.

성공적인 요청

  • Complete requests: 100

  • Failed requests: 0 (모든 요청이 성공적으로 완료됨)

응답시간

  • Time taken for tests: 1.041초 (전체 테스트 소요 시간)

  • Requests per second: 96.10 [#/sec] (초당 요청 수)

  • Time per request: 104.056 ms (평균 요청 시간)

  • Time per request (mean, across all concurrent requests): 10.406 ms (모든 동시 요청에 걸린 평균 시간)

전송률

  • Transfer rate: 73.20 [Kbytes/sec] received (초당 수신 바이트)

연결 시간

  • Connect: min=0 ms, mean=10 ms, max=956 ms

  • Processing: min=2 ms, mean=7 ms, max=10 ms

  • Waiting: min=2 ms, mean=7 ms, max=9 ms

  • Total: min=4 ms, mean=17 ms, max=961 ms

퍼센티일

  • 50%의 요청이 8 ms 이내에 완료됨

  • 66%의 요청이 8 ms 이내에 완료됨

  • 75%의 요청이 8 ms 이내에 완료됨

  • 90%의 요청이 9 ms 이내에 완료됨

  • 100%의 요청이 961 ms 이내에 완료됨 (가장 긴 요청 시간)

 

 

6. 부하 테스트

추가로 부하 테스트도 진행해보겠습니다. 더 높은 동시성 수준과 요청 수로 테스트 해보겠습니다.

ab -n 1000 -c 50 http://huha.site/

 

성공적인 요청

  • Complete requests: 1000 (모든 요청이 성공적으로 처리되었습니다)

  • Failed requests: 0 (실패한 요청이 없습니다)

응답시간

  • Time taken for tests: 0.784초 (전체 테스트 소요 시간)

  • Requests per second: 1275.20 [#/sec] (초당 처리된 요청 수)

  • Time per request: 39.209 ms (평균 요청 처리 시간)

  • Time per request (mean, across all concurrent requests): 0.784 ms (모든 동시 요청의 평균 처리 시간)

전송률

  • Transfer rate: 971.35 [Kbytes/sec] (초당 전송된 데이터 양)

연결 시간

  • Connect: min=0 ms, mean=1 ms, max=6 ms

  • Processing: min=4 ms, mean=37 ms, max=47 ms

  • Waiting:min=3 ms, mean=37 ms, max=47 ms

  • Total:min=10 ms, mean=38 ms, max=48 ms

퍼센티일

  • 50%의 요청이 39 ms 이내에 완료됨

  • 90%의 요청이 42 ms 이내에 완료됨

  • 99%의 요청이 47 ms 이내에 완료됨

  • 100%의 요청이 48 ms 이내에 완료됨 (가장 긴 요청 시간)

 
 
 
 
끝까지 읽어주셔서 감사합니다. 도움이 되셨기를 바랍니다:)
 
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x