안녕하세요. 오늘은 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 이내에 완료됨 (가장 긴 요청 시간)
성공적인 요청
-
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 이내에 완료됨 (가장 긴 요청 시간)