코딩못하는사람

서버 성능 테스트/ jmeter 본문

C.S 지식정리

서버 성능 테스트/ jmeter

공부절대안함 2021. 4. 18. 23:14

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: 요청을 보낸 후 다음 요청을 보낼때까지 시간을 의미

 

https://12bme.tistory.com/272?category=744863

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
Comments