이것저것

JMeter

재심 2023. 4. 1. 11:48

목차

     

    [Apache JMeter]

    웹 성능을 측정하기 위해 대중적으로 가장 많이 사용한다고 한다. 

    Apache 재단에서 제공하는 오픈소스.

    다양한 플러그인 제공 

    Master - Slave 개념으로 대량 부하 테스트도 가능.

     

    아래 블로그 참조하여 기본적인 세팅 진행해봄 

    https://velog.io/@leejh9022/Jmeter-%EC%84%A4%EC%B9%98-Jmeter-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8

     

    [전제조건]

    JDK 8이상 설치

    Windows 환경에서는 GUI 기반으로 구동가능 (.bat 파일제공)

     

    [설치]

    https://jmeter.apache.org/download_jmeter.cgi 

    binaries - zip 파일 다운로드 후 압축 풀기

     

    /bin/jemeter.bat 로 실행

     

     

    [플러그인 설치]

    jmeter plugin manager 설정

    https://jmeter-plugins.org/get/ 

    다운로드 받은 후 ./lib/ext에 넣고 확인

     

    Options-Plugins Manager 추가된 것 확인

    Plugin Manager에서 아래 추가로 설치

    • 5 Additional Graphs
    • Custom Thread Groups

     

    Transactions Per Second Plugin 설치

    TPS 측정을 위해 많이 사용한다고 한다. 

     

    https://jmeter-plugins.org/?search=jpgc-graphs-basic

    다운로드 후 ./lib 폴더와 ./lib/ext 폴더에 넣기 

     

    Add-Listener-jp@gc 3개 추가된 것 확인

    [기본 세팅]

    User Defined Variables 

    변수 세팅해놓고 여기저기서 쓸 수 있다.

     

    Transactions per Second, Thread Group 추가

     

    Number of Threads (users): 스레드 수

    Ramp-up period (seconds): 사용자의 Think Time으로 사용자가 몇초에 한 번 서비스를 클릭하는지에 대한 값이다. 또한 지정한 수 만큼의 Thread가 실행되기까지 걸리는 시간을 의미한다. 

    (ex: Thread 수가 300이고, Ramp-up period가 1이면 300개의 Thread가 1초만에 생성된다)

    Loop Count: 몇 번 반복해서 요청할 것인가? 

     

    예제세팅) 100개의 스레드가 100초 간격으로 요청하니까 스레드당 1초 단위로 100회씩 request threads를 발생시킨다 (TPS: 100)

    number of threads: 100

    Ramp-up period: 100

    Loop Count: 100

    => 총 요청수 number of threads * loop count = 10000 이 된다.  

     

     

    Specify Thread lifetime

    • Duration
    • startup delay (seconds): 설정한 시간 후 테스트 시작 

     

    HttpRequest 추가 

    Protocol: http

    Server Name: ${server_ip}

    Port Number: ${server_port}

    HTTP Request: GET/POST

    Path: "/test"

    Body Data

     

    Advanced - Implementation - HttpClient4 선택

     

    POST 호출인 경우 아래 Http Header Manager 추가 세팅

     

     

    Content-Type: application/json

     

    Result Viewer 추가

    View Results Tree, Summary Report 2개 추가 

     

    [Remote Test (부하 분산 테스트)]

    대용량 테스트를 할 때는 JMeter 한 대로는 성능이 안나와 힘들 수 있어서 여러 대의 부하발생기를 연결해서 동시에 테스트 해야한다. 

    JMeter에서 제공하고 있다.

     

    • JMeter Controller: 부하 발생기들에 명령을 전달하는 Master 역할
    • JMeter Server: 실제 부하를 발생시키는 노드들. Controller에서 명령을 받고 수행 후 결과를 다시 Controller에 반환한다.

     

    /bin/jmeter.properties 파일에서 역할별로 설정을 수정 한 후 구동하게 된다.

    Master 설정

    remote_hosts=remote_server:2099, remote_server2:2099
    client.rmi.localport=2099
     
    server.rmi.ssl.disable=true

     

    설정 후 JMeter.bat 실행시켜서 Remote 목록 확인

     

     

    Slave 설정

    server_port=2099
    server.rmi.localport=4000 #내부적으로 사용하는 포트인듯
     
    server.rmi.ssl.disable=true

     

    설정 후 /bin/Jmeter-server.bat 실행.

    아래처럼 나오면 성공

     

    명령 수행

    Master 서버에서 Run - Remote Start (All) 

    Slave 서버에서 아래처럼 나오면 성공

     

     

    Linux 환경에서 구동하기

    Windows 서버를 Master로 두고, Linux 서버를 Slave로 두어 구동해보기

    세팅방식은 동일하나 linux 서버에서 아래 명령어로 구동한다.

     

    $ cd ./bin
    $ sudo ./jemeter-server
     
    #아래처럼 나오면 구동 성공
    Using local port: 4000
    Created remote object: UnicastServerRef2 [liveRef: [endpoint:[ip:4000](local),objID:[49488e19:17e08b4de07:-7fff, -4386202146275920573]]]
     
    #Windows에서 구동 후 아래같은 로그가 찍힌다.
    Starting the test on host server:2099 @ Thu Dec 30 09:22:56 KST 2021 (1640823776010)
    Finished the test on host server:2099 @ Thu Dec 30 09:22:57 KST 2021 (1640823777494)

    [기타 플러그인들]

    jp@gc - Ultimate Thread Group

     

    • Start Thread Count: 스레드 수
    • Initial Delay: 시작 시 지연 
    • StartUp Time: 모든 스레드가 올라오는데 걸리는 시간
    • Hold Load For: 부하 유지 시간 
    • Shutdown Time: shutdown을 해당 시간만큼 시간들여서 수행 

    Timer

    일정한 TPS를 내기위해 timer를 써야하는듯하다. 

    https://sooo-9.tistory.com/34

     

    Target Throughput

    60: 초당 1번 요청한다는 의미 

    => 스레드수 1000이고 Target Throughput이 60인 경우 스레드 1000개가 초당1번 요청하므로 TPS = 1000으로 유지된다. 

    600이면 TPS 10000을 기대할 수 있음.

     

     

    [Trouble Shootings]

    java.net.BindException: Address already in use: connect 

    테스트 과정에서 위 오류가 발생하면서 실패하는 경우가 빈번히 있었다. 

     

    찾아보니.. 아래처럼 해결하라고 함.

    https://blog.naver.com/yeom7707/90047989629

     

    1. cmd - regedit
    2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    3. MaxUserPort 10진수로 65564로 설정 
    4. 재부팅 

    [Test Plan 샘플 파일]

     

    test-plan-sample.jmx
    0.01MB

     

    [참조]

    https://velog.io/@leejh9022/Jmeter-%EC%84%A4%EC%B9%98-Jmeter-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%B6%80%ED%95%98%ED%85%8C%EC%8A%A4%ED%8A%B8

     

    Jmeter 설치 & Jmeter를 이용한 부하분산테스트

    서버 부하테스트를 하는 툴은 시중에 많이 있지만 이번엔 Jmeter를 사용해서 테스트를 실행해보았다. Jmeter는 다른 툴에 비해 다양한 기능과 플러그인이 존재하고 빠른 시나리오 작성이 가능하다.

    velog.io

    https://sooo-9.tistory.com/34

     

    JMeter Timer

    컴퓨터는 반복 작업을 빠르게 수행하지만 실제 사용자들은 중간에 서버에 내용을 보내지 않고 대기하는 시간이 발생합니다 이 시간을 Thinking Time이라 합니다 Test Plan을 세울 때 Thinking Time까지 고

    sooo-9.tistory.com

    https://blog.naver.com/yeom7707/90047989629

     

    java.net.BindException: Address already in use: connect

    포트가 TIME_WAIT 상태일 때 같은 포트로 같은 목적지에 접속하려고 하면 나타나는 예외인 것으로 ...

    blog.naver.com

     

    '이것저것' 카테고리의 다른 글

    Ansible 설치하기  (0) 2023.04.15
    nGrinder  (0) 2023.04.08
    Intellij 단축키 모음  (0) 2023.03.09
    MSA에서 Outbox Pattern에 대해  (0) 2022.11.20
    Materialized View란?  (0) 2022.11.06