일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- java 자료구조 활용
- java알고리즘문제풀이
- java list 출력
- javaJVM
- java참조자료형
- 작은수제거하기
- java list 저장
- java map 출력
- 컴파일
- 인터프린터언어
- 프로그래머스제일작은수
- java map
- java알고리즘
- java최솟값구하기
- 노베이스부트캠프
- java set 저장
- java set 출력
- 격파르타비전공자
- 격파르타장점
- java map 저장
- 비전공자sqld
- 격파르타합격후기
- 격파르타후기
- java기본자료형
- 항해15기
- 항해99후기
- 프로그래머스
- javaJRE
- sqld자격증합격
- 코딩부트캠프후기
- Today
- Total
코딩과 결혼합니다
[Game_Crew] 성능 테스트 : JMeter 사용법과 테스트 본문
JMeter 용어
- Thread Group : 테스트에 사용될 쓰레드의 개수. (쓰레드 = 사용자)
- Sampler : 사용자가 취할 행동 (로그인, 게시물 작성, 조회 등)
- Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리
- Configuration : Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
- Assertion : 응답 확인 방법 (응답 코드, 본문 내용 비교 등)
현재의 내 서비스는 어느 정도의 성능을 가지고 있을까?
나는 소소하게 1분에 1000명의 유저가 동시에 API요청을 했을 때에 어느정도의 성능이 나오는지 확인해 보았다.
//유저의 평가들을 가져오는 API
@GetMapping("/user/rating/{evaluated_user}")
public UserRatingsResponseDto getUserRatings(
@PathVariable Long evaluated_user,
@RequestParam int page,
@RequestParam int size
){
return ratingService.getUserRatings(evaluated_user, page-1, size);
}
}
1000명의 유저 1분(60초)동안 동시에 실행
임의의 (Id 10번) 유저의 점수를 조회하도록 API 요청을 설정
HTTP Request에 대한 Listener를 추가하여 응답을 확인하고 테스트 결과를 분석
✔️결과
Average(평균) 141,
Min(최소값) 0,
Max(최대값) 200,
std.Dev.(표준 편차) 8.20,
Error %(에러 비율) 0.00%,
Througghput(처리량) 16.7/sec,
Received KB/sec(수신 데이터 전송 속도) 16.50,
Sent KB/sec(전송 데이터 전송 속도) 2.34,
Avg.Bytes(평균 바이트) 1015.0
다음으로 하나의 데이터를 처리하는 시간은 0.2 초 안으로 내 기준 만족스러운 수치이다.
더 많은 유저가 1분동안 동시에 API를 요청하였을 때에는 어떤 결과가 나올까?
1만명의 유저가 1분동안 동시에 요청하도록 하였고,
왜 인지 모르겠으나 1분동안은 에러가 0.00% 였다가 1분을 넘겨버리며 계속해서 에러가 뜨기 시작했다.
알아보니 서버의 처리량이 초과되어 에러가 발생할 수 있다고 한다. (CPU, 메모리 등)
(더하여 다른 api까지 함께 실행하고 있었다.. 11000으로 돌리고 있었던 것이다. - 안쓰는 API는 disable을 해두었다.)
📌5000명
Average 37459,
Min 0,
Max 77118,
std.Dev. 21974.84,
Error % 0.00%,
Througghput 36.6/sec,
Received KB/sec 36.30,
Sent KB/sec 5.15,
Avg.Bytes 1015.0
user | 1000명 | 5000명 |
처리량 | 초당 16.7개 | 초당 36.6개 |
수신 데이터 전송 속도 | 초당 16.50KB 데이터 수신 | 초당 36.30KB |
전송 데이터 전송 속도 | 초당 2.34KB 데이터 전송 | 초당 5.15KB |
에러 | 0.00% |
사용자의 수가 늘어남에 따라 더 많은 요청을 처리함을 볼 수 있었다.
그러나 처리 시간이 엄청나게 늘어남을 확인하였고 성능을 개선할 필요가 느껴졌다.
(처리 시간이 249ms - 38923ms - 76462ms 로 아주 크게 늘어남)
성능 테스트 목표
1분동안 5000명의 유저가 동시에 API 요청을 하였을때 평균 1000ms 이하로 처리할 수 있게 성능을 올려볼 것이다.
이를 만족하면 다른 API 테스트도 진행하면서 전체적인 성능을 높여보고자 한다.
서버를 확장하거나 로드 밸런서를 사용하는 것은 이 규모에는 쓰지 않아도 될 것같아 최대한 미루고,알고리즘을 개선하거나 캐싱을 사용하는 등으로 시간을 단축시켜보는 방법을 사용할 것이다.
'코딩과 매일매일♥ > Game_Crew' 카테고리의 다른 글
[Game-Crew] 트러블 슈팅 : 유저 평점 조회 API 캐싱 (실패) (0) | 2024.01.16 |
---|---|
[Game-Crew] 트러블 슈팅 : 로컬에 Embedded Redis 적용(Chche, Redis) (0) | 2024.01.12 |
[Game_Crew] 성능 테스트 : 저장된 더미데이터 활용하기 (1) | 2024.01.10 |
[Game_Crew] 성능 테스트 : 툴 선정하기, 설치 (0) | 2023.12.28 |
[Game_Crew] 성능 테스트 : Java Faker 를 사용하여 더미데이터 생성하기 (0) | 2023.12.27 |