
1. 테스트 준비
* Smoke Test

- 최소한의 부하로 구성된 테스트로, 테스트 시나리오에 오류가 없는지 확인할 수 있어요.
- 최소 부하 상태에서 시스템에 오류가 발생하지 않는지 확인할 수 있어요.
- VUser를 1 ~ 2로 구성하여 테스트합니다.
* Load Test

- 서비스의 평소 트래픽과 최대 트래픽 상황에서 성능이 어떤지 확인합니다. 이 때 기능이 정상 동작하는지도 확인합니다.
- 애플리케이션 배포 및 인프라 변경(scale out, DB failover 등)시에 성능 변화를 확인합니다.
- 외부 요인(결제 등)에 따른 예외 상황을 확인합니다.
* Stress Test

- 서비스가 극한의 상황에서 어떻게 동작하는지 확인합니다.
- 장기간 부하 발생에 대한 한계치를 확인하고 기능이 정상 동작하는지 확인합니다.
- 최대 사용자 또는 최대 처리량을 확인합니다.
- 스트레스 테스트 이후 시스템이 수동 개입없이 복구되는지 확인합니다.
2. influx DB & 그라파나 설치
# 1. influx db 설치
$ sudo apt install influxdb
# 2. grafana 설치
# 2-1. ubuntu 20.04 가 아닌 경우
$ sudo apt install grafana
# 2-2. ubuntu 20.04 인 경우
$ wget -q -O - <https://packages.grafana.com/gpg.key> | sudo apt-key add -
$ echo "deb <https://packages.grafana.com/oss/deb> stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
$ sudo apt update
$ sudo apt install grafana
$ sudo service grafana-server start
- influx db 는 8086 포트를 점유
- grafana 는 3000 포트를 점유
- 보안그룹에서 자신의 IP 에 대해 3000 포트 open 정책을 추가
- 그라파나를 설치한 서버IP:3000 으로 접속
- 로그인 화면이 뜨면 admin/admin 으로 로그인
3. K6 설치
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
$ echo "deb https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
$ sudo apt-get update
$ sudo apt-get install k6
4. grafana 설정
- configuration > datasource 메뉴에서 datasource 를 추가
- Dashboards > Import > Grafana.com Dashboard 항목에 2587을 입력하고, datasource 로 influxdb 를 설정한 후 import
5. 테스트 계획하기 - 부하테스트 전제조건
- 대상 시스템 범위
- proxy(nginx) > was(tomcat) > db(mysql)
- 목푯값 설정 (latency, throughput, 부하 유지기간)
- latency : 80ms 이하
- throughput
- 부하 유지기간
- smoke : 1m
- load : 24m
- stress : 18m
- VUser
- 요청수 : 5회(메인 - 로그인 페이지 - 로그인 요청 - 메뉴 선택 - 기능 요청)
- T(VU iteration) : 5 x 0.5s + 1s = 3.5s
- 최대 VUser : 123.3 x 3.5 / 5 = 86
- 최소 VUser : 37 x 3.5 / 5 = 26
- 부하 테스트 시 저장될 데이터 건수 및 크기
- 이번 부하 테스트는 조회를 대상으로 하므로 추가로 저장되는 데이터는 없음
- 조회 데이터
- 노선 : 23개, 구간 : 340개, 역 : 616개, 사용자 : 4개
6. 테스트 진행하기
k6 실행방법
# k6만 실행시
$ k6 run smoke.js
# k6 실행한 결과를 influxDB에 저장하여 grafana로 조회하려고 하는 경우
$ k6 run --out influxdb=http://localhost:8086/myk6db smoke.js
Smoke, Load, Stress 테스트 결과
1. smoke

2. load

3. stress

stress 테스트 이슈
- stress 테스트 진행시 400명 정도에서 오류가 발생하기 시작했지만 오류 비율이 0.01% 정도로 낮아서 수치를 올렸음
- 1000명이 넘어갔을쯤 부터 오류 발생 빈도는 높아졌는데 5분정도로만 테스트 시간을 지정해도 서버가 아예 멈춰버림
- 원인 및 해결방법
- influxDB 의 insert 시간 초과
-> k6 테스트 진행시 write time out 시간 옵션(K6_INFLUXDB_PUSH_INTERVAL) 추가 - 운영 서버의 too many open files
-> openfiles 수를 늘려주는 것으로 해결
- influxDB 의 insert 시간 초과
// WAS의 스레드 생성 개수를 확인
ps -efL | grep java | grep -v grep | wc -l
// 각 상태별 커넥션 개수 확인
netstat -an | wc -l
// User Limit 정보 확인
ulimit -aS
...
open files (-n) 1024 // default 1024
...
// ulimit 재설정
ulimit -n 40960
- k6 홈페이지에도 stress 테스트 관련 글이 있어 추가 - https://k6.io/docs/testing-guides/running-large-tests
반응형