서버 환경 테스트 도중 다량의 요청이 일어날 때 얼마나 많은 트래픽이 발생하며, 지연시간이 어떻게 나올지 궁금하였다.
이를 쉽게 측정할 수 있는 도구를 찾다보니 AB라는 것을 찾아 테스트 해 보았다.
실행 방법은 간단.
# ab -n 100 -c 100 [URL]
-c 옵션으로 요청한 수 만큼 최초 요청 후
결과가 들어온 순서대로 다음 요청으로 대체된다.
(1,2,3) --> 요청
(1,2,3) --> 2요청이 종료
(1,4,3) --> 4 요청
특정 사이트에 요청하는 예를 보자.
A 라는 사이트에 헤더에 특정 토큰을 넣고 get 방식으로 호출한다.
# ab -n 10000 -c 1000 -H "token:sdlkfjslkdjf323f!!@fwef23" https://api.testServer.co.kr/users/schedules?linkSeq=1&searchMode=1
-H 옵션을 통해 헤더에 key-value 값을 넣어주고 URL 뒤에 파라미터를 붙여 테스트를 진행하였다.
그리고 아래와 같은 결과가 출력 되었다.
Server Software: nginx/1.18.0
Server Hostname: api.testServer.co.kr
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Document Path: /users/schedules?linkSeq=1
Document Length: 1066 bytes
Concurrency Level: 1000
Time taken for tests: 22.073 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Non-2xx responses: 10129
Total transferred: 16671050 bytes
HTML transferred: 10797514 bytes
Requests per second: 453.04 [#/sec] (mean)
Time per request: 2207.316 [ms] (mean)
Time per request: 2.207 [ms] (mean, across all concurrent requests)
Transfer rate: 737.56 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 12 1263 361.0 1287 2138
Processing: 32 868 502.7 774 3951
Waiting: 7 604 508.2 404 3869
Total: 44 2131 548.5 1984 5455
Percentage of the requests served within a certain time (ms)
50% 1984
66% 2028
75% 2129
80% 2246
90% 3185
95% 3234
98% 3453
99% 3621
100% 5455 (longest request)