일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 포트앤어댑터 아키텍처
- DP
- 스프링
- disjoint set
- 이펙티브 자바
- equals
- Redis
- java
- 데이터 flow
- 헥사고날 아키텍처
- BFS
- 파이썬
- 백준
- 비트마스크
- docker
- 알고리즘
- 위상정렬
- 자바
- spring security
- 문자열
- JPA
- dataframe
- ddd
- 세그먼트 트리
- dfs
- UML
- series
- pandas
- 다익스트라
- springboot
- Today
- Total
코딩못하는사람
서버 성능 테스트/ jmeter 본문
Jmeter 란?
Apache JMeter는 웹 애플리케이션처럼 클라이언트-서버 구조로 된 소프트웨어의 성능 테스트를 위해서 만들어진 자바 오픈소스이다
프로토콜(Protocol)도 계속 추가되어 TCP, HTTP(S), FTP, JDBC, LDAP, SMTP, SAP/XML, RPC 등 현재 범용으로 사용되는 프로토콜 대부분을 지원한다.
주요 설정
1.Thread Group
JMeter에서 다양한 하위 Element 항목들을 제어하기 위한 시작점이다.
Thread Group을 생성하면 부하 테스트 수행 시 원하는 항목들로 변경하기 위한 설정항목들이 나온다.
Number of Threads(users) : Single Thread 수로 사용자 수를 의미
Ramp-Up Period(in seconds) : Single Thread 들을 실행시키기 위한 시간을 의미 (30 thread에 ramp-up period가 120 초 라면 4초에 쓰레드 하나씩 증가.)
Loop Count : Thread가 행하는 작업의 반복 횟수
2. Controller
Controller란 시험수행절차를 제어하는 역할을 수행하며, Sampler와 Logical Controller 두가지로 구성된다.
Sampler란 Request를 Server에 전달하기 위한 도구이며, Logical Controller란 Request를 조작할 수 있는 로직을 추가하는 것을 허용하는 도구이다. 두 도구 모두 Thread Group 하위에 생성하고 사용가능하다.
3. Listeners
Listener는 정보 접근을 제공하는 도구이며, Request 요청들에 대한 Response Time 추이 그래프라던지 실시간 Request/Response 응답을 확인할 수 있는 다양한 플러그인들을 지원한다.
성능 테스트란?
성능 테스트란 서비스의 성능 향상을 위해서 실제 환경과 비슷한 환경을 임의로 조성해서 테스트를 진행하는 것이다. 크게 4가지로 분류할 수 있다.
- Load(부하)테스트 : 부하를 순차적으로 증가시켜서 응답시간이 급격히 증가하거나 처리량의 문제,CPU 또는 Memory 사용량이 문제가 생기는 임계점을 찾아내는 테스트
- Stress 테스트 : 임계값 이상의 요청이나 비정상적인 요청을 보내서 처리를 확인하고 시스템의 성능 한계치를 측정하는 테스트
- Spike 테스트 : 사용자가 갑자기 몰렸을 때 요청이 정상적으로 처리되는지 , 업무 부하가 줄어들 때 정상적으로 반응하는지 확인하는 테스트
- Stability/Soak 테스트 : 긴 시간동안 테스트를 진행하여 시간이 지남에 따라 메모리와 성능 정보에 대한 변화를 관찰하는 테스트
성능 테스트 주요 용어 정리
Active User: 실제 서버에 연결된 상태로 요청을 처리 중인 사용자
InActive User: 웹브라우저에 결과 화면이 출력된 상태에서 화면의 내용을 읽거나 정보를 입력하고 있는 사용자이다. 서버와의 세션(Session) 정보를 가지고 있지만 직접 접속하여 요청을 주고받는 상태가 아닌 사용자를 의미
Concurrent User(Active User + InActive User): 보통 '동시 접속 사용자수'라고 표현한다. 성능 테스트에서 가상 사용자 수를 결정하는 기준이 된다. 서비스 유형과 시간에 따라 그 비율이 달라지긴 하지만, 일반적으로 Active User와 InActive User 비율이 1:10 정도 된다고 한다.
Virtual User: 가상 사용자 수로, JMeter에서는 Thread 라고 정함.
Throughput: 단위 시간당 대상 서버(웹서버, WAS, DB 등)에서 처리되는 요청의 수를 말합니다. JMeter에서는 시간 단위를 보통 TPS(Transaction Per Second)로 표현한다.
Response Time/Load Time: 응답시간 또는 처리시간이라고 표현한다. 요청을 보낸 후 응답이 완료되어 사용자 화면에 출력될때까지의 시간을 나타낸다. 시스템의 성능을 평가하는 지표로 주로 사용
Latency: 요청을 보낸 후 데이터를 받기 시작할 때까지 시간
Think Time: 하나의 요청에 응답을 수신하고 다음 요청을 보낼 때까지 시간을 의미한다. 테스트에서 실제 사용자의 사용패턴과 유사한 패턴을 구현하기 위해서는 이 Think Time을 적절히 적용해야 한다.
Request Interval Time: 요청을 보낸 후 다음 요청을 보낼때까지 시간을 의미
Latency와 Load Time을 구분함으로써 성능을 분석할 때 요긴하게 사용할 수 있다.
예를 들어 A,B 사이트 동일한 테스트를 진행할 때 Latency는 같지만 Loadtime이 B가 훨씬 컸다면 B 사이트는 전송 받는 데이터가 걸리는 시간이 길었다는 뜻이 되므로 웹서버 튜닝보다는 대역폭을 늘려야한다.
출처: https://12bme.tistory.com/272?category=744863 [길은 가면, 뒤에 있다.]
실습
간단하게 Apache HTTPS Server를 로컬에 만들어서 간단한 웹사이트를 만든 후 Load Test를 진행해 보았다.
내 웹사이트에 가상유저가 들어와서 페이지를 하나씩 둘러본다는 가정을 두고 시나리오 스크립트를 만들고 테스트를 진행하였다.
임계점을 찾아야 하므로 첫 Thread를 100>70>40>60>65 순으로 찾아나갔다.
결론 : 쓰레드 60과 65사이를 계속 돌렸을 때 적은 오류가 생기지만 오차로 인해 매번 차이가 생긴다. 따라서 60명이 오류가 튀지 않는 임계점으로 잡았다.
배운점
처음 Think Time을 고려하지 않아서 너무 낮은 Thread에서만 테스트가 가능해서 고려해서 수정해주었다.
RPS,Session,Keep-alive 같은 설정이 테스트에 고려 되어야 한다.
CPU 사용률이 80%가 넘어가지 않게 테스트를 진행해야 한다. 넘어가면 성능에 문제가 생긴다고 한다.
Jmeter의 Plugin중 jp@gc PerfMon Metrics Controller를 사용하면 내가 관찰하는 서버에 agent를 둬서 memory나 CPU 사용량을 관찰 가능하다.
출처: https://12bme.tistory.com/272?category=744863 [길은 가면, 뒤에 있다.] 에서 공부했습니다.
'C.S 지식정리' 카테고리의 다른 글
NoSQL이란 (0) | 2021.12.22 |
---|---|
nginx로 로드밸런싱 해보기 (0) | 2021.09.10 |
Redis란? (우아한 Redis 강연) (0) | 2021.07.31 |
유스케이스 다이어그램 (2) | 2021.04.29 |
[UML] 클래스 다이어그램 (0) | 2021.04.29 |