들어가기
어플리케이션의 테스트를 하는 경우,
- 로컬 호스트에서 ab 테스트
- 부하 테스트 서버에서의 ab 테스트
- 부하 테스트 서버에서의 Locust 테스트
와 같이 단계별로 테스트하는 것이 중요하다고 한다. (p.334, <아마존 웹 서비스 부하 테스트 입문> 제이펍 출판)
가볍게 ab 테스트를 해보자.
실험
EC2 t2.2xlarge(CPUv8 32G Mem)에서 EC2 t2.micro 프리티어(CPUv1 1G Mem)로 간단한 ab 스트레스 테스트를 진행해보았다.
ab -c 100 -n 100000 url
100개의 동시 접속이 총 100,000번을 접속하도록 명령
- -c : 동시 접속의 수
- -n : 총 요청 수
Benchmarking 43.201.6.20 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests
Server Software:
Server Hostname: ip주소
Server Port: 3000
Document Path: /raffles
Document Length: 2417 bytes
Concurrency Level: 100
Time taken for tests: 617.749 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 274000000 bytes
HTML transferred: 241700000 bytes
Requests per second: 161.88 [#/sec] (mean)
Time per request: 617.749 [ms] (mean)
Time per request: 6.177 [ms] (mean, across all concurrent requests)
Transfer rate: 433.15 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 2 2.0 1 13
Processing: 108 616 70.3 592 1366
Waiting: 105 614 70.1 591 1366
Total: 109 617 70.2 594 1367
Percentage of the requests served within a certain time (ms)
50% 594
66% 615
75% 639
80% 655
90% 707
95% 755
98% 826
99% 878
100% 1367 (longest request)
- Time taken for tests : 총 소요시간
- Requests per second : 초당 처리 속도
- Time per request : 개별 처리 속도
Throuput(시간 당 처리량)을 표현하는 대표적인 지표인 RPS(Requests per seconds)는 1초에 얼마나 많은 요청을 처리하냐를 의미하는데, 위의 테스트의 경우 161개다. 비교 대상이 없어서 얼마나 적절한지는 잘 모르겠다.
초당 전송 가능 kb는 433이다.
50%에서 99% 까지 속도차가 조금 벌어지긴 하지만 드라마틱하게 벌어지진 않아서 다행이다. 100% 군에 위치한 request는 1.3초나 소요되었다.
후기
터미널 환경에서 코드 한 줄로 테스트할 수 있어 가볍다는 장점이 좋았다.
추가 참고
TPR(mean)과 TPR(mean, accross all concurrent requests)의 차이
- Time per request (mean) tells you the average amount of time it took for a concurrent group of requests to process.
- Time per request (mean, across all concurrent requests) tells you the average amount of time it took for a single request to process by itself.
- If you processed 100 requests concurrently, it took 3953.446ms.
- If you processed them individually, it would take 39.534ms * 100 = 3953.4ms
- Same number. There is no time savings to performing concurrent requests (at least for the total number of requests you tested)
위 수치 계산법
- Time per request: 1.390 [ms] (mean) = 1000/Request per second* Concurrency Level
- Time per request: 0.139 [ms] (mean, across all concurrent requests) = 1000/Request per second
- Time taken for tests = 1000/Request per second * Complete requests
- Transfer rate = Total transferred / Time taken for tests / 1024
참고
'Research > Testing' 카테고리의 다른 글
test_nGrinder의 지표를 성능 테스트 지표로 사용해도 될 것인가에 대한 고민 (0) | 2023.02.28 |
---|---|
부하테스트 단계와 발생 문제 유형 (1) | 2023.02.24 |
성능 테스트란 무엇일까 (0) | 2023.02.23 |
Artillery로 성능 측정하기 (0) | 2023.02.22 |
DB 성능 측정 실험에 대한 논의 (0) | 2023.02.15 |
댓글